2011-04-13 24 views
71

Al usar SQL Server 2008, tengo una consulta que se utiliza para crear una vista y estoy tratando de mostrar el nombre de un mes en lugar de un número entero.Devolver el nombre del mes en la consulta de SQL Server

En mi base de datos, la fecha y hora está en una columna llamada OrderDateTime. Las líneas en la consulta que devuelven la fecha es:

DATENAME(yyyy, S0.OrderDateTime) AS OrderYear, 
DATEPART(MONTH, S0.OrderDateTime) AS OrderMonth 

Esto devuelve una columna de año y una columna de meses como enteros. Quiero devolver los nombres de los meses (enero, febrero, etc.). Lo he intentado:

CONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime) AS OrderMonth 

Obviamente, esto es incorrecto, ya que aparece el mensaje "Sintaxis incorrecta cerca de 'AS'". ¿Cuál es la sintaxis adecuada para mi consulta?

+8

El mensaje sintaxis incorrecta se debe a no cerrar los soportes finales antes de la 'AS' -' convert (varchar (3), DATEPART (MES, S0 .OrderDateTime)) AS OrderMonth' – Jaymz

+0

Qué significa S0 en la consulta sql – user7157710

+0

@ user7157710 S0 es el alias dado a la tabla donde se encuentra el campo. – tia97

Respuesta

128

Esto le dará el nombre completo del mes.

select datename(month, S0.OrderDateTime) 

Si sólo desea las tres primeras letras que puede utilizar esta

select convert(char(3), S0.OrderDateTime, 0) 
+0

Comentario incorrectamente publicado en [respuesta] (http://stackoverflow.com/a/40592863/5292302) "¿Qué significa S0 en la consulta SQL?" por [user7157710] (http://stackoverflow.com/users/7157710/user7157710) –

+1

S0 es un alias de una tabla. La respuesta es llevarlo a cabo desde la pregunta. – Bpainter

12

Cambio:

CONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime) AS OrderMonth 

Para:

CONVERT(varchar(3), DATENAME(MONTH, S0.OrderDateTime)) AS OrderMonth 
+0

Creo que te refieres a 'DATENAME'. 'DATEPART' no lo haría. – Druid

16

¿Ha intentado DATENAME(MONTH, S0.OrderDateTime)?

1

Esto le dará u lo que están solicitando para:

select convert(varchar(3),datename(month, S0.OrderDateTime)) 
2

Seleccionar SUBSTRING (convert(varchar,S0.OrderDateTime,100),1,3) de su nombre de la tabla

6

Prueba esto:

SELECT LEFT(DATENAME(MONTH,Getdate()),3) 
2

En SQL Server 2012, es posible utilizar FORMAT(@mydate, 'MMMM') AS MonthName

1
SELECT MONTHNAME(`col1`) FROM `table_name` 
0

Sin presionar db podemos buscar el nombre de todos los meses.

WITH CTE_Sample1 AS 
(
    Select 0 as MonthNumber 

    UNION ALL 

    select MonthNumber+1 FROM CTE_Sample1 
     WHERE MonthNumber+1<12 
) 

Select DateName(month , DateAdd(month , MonthNumber ,0)) from CTE_Sample1 
0

básicamente esto ...

declare @currentdate datetime = getdate() 
select left(datename(month,DATEADD(MONTH, -1, GETDATE())),3) 
union all 
select left(datename(month,(DATEADD(MONTH, -2, GETDATE()))),3) 
union all 
select left(datename(month,(DATEADD(MONTH, -3, GETDATE()))),3) 
Cuestiones relacionadas