Devolver el nombre del mes en la consulta de SQL Server

81

Usando SQL Server 2008, tengo una consulta que se usa para crear una vista y estoy tratando de mostrar el nombre de un mes en lugar de un número entero.

En mi base de datos, datetimeestá en una columna llamada OrderDateTime. Las líneas de la consulta que devuelven la fecha son:

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

Esto devuelve una columna de años y una columna de meses como números enteros. Quiero devolver los nombres de los meses (Jan, Feb, etc). He intentado:

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

Obviamente, esto es incorrecto, ya que obtengo

Sintaxis incorrecta cerca de 'AS'

mensaje. ¿Cuál es la sintaxis adecuada para mi consulta?

Casey DiBroaggio
fuente
8
El mensaje de sintaxis incorrecta se debe a que no se han cerrado los corchetes finales antes del AS-CONVERT(varchar(3), DATEPART(MONTH, S0.OrderDateTime)) AS OrderMonth
Jaymz
¿Qué significa S0 en la consulta SQL
User7157710
@ user7157710 S0 es el alias dado a la tabla donde se encuentra el campo.
tia97

Respuestas:

154

Esto le dará el nombre completo del mes.

select datename(month, S0.OrderDateTime)

Si solo desea las primeras tres letras, puede usar esta

select convert(char(3), S0.OrderDateTime, 0)
Mikael Eriksson
fuente
Comentario publicado incorrectamente en la respuesta "¿Qué significa S0 en la consulta SQL?" por user7157710
Petter Friberg
1
S0 es un alias de una tabla. La respuesta es trasladarlo de la pregunta.
Bpainter
Me gustaría agregar que, por lo general, ni siquiera desea usar estas funciones. Es mejor seleccionar la fecha como fecha (hora) o el mes como un número entero o lo que sea y luego dejar que su interfaz de usuario se encargue de 'convertirlo' en un nombre de mes amigable para los humanos. De esa manera, su aplicación / interfaz de usuario puede encargarse de la localización en lugar de su base de datos, que no tiene la menor pista sobre las preferencias de su usuario o la configuración de la aplicación para la localización. Para decirlo de otra manera, piénselo así: ¿qué pasa si su usuario prefiere el chino 二月 sobre febrero?
RobIII
18

¿Usted ha intentado DATENAME(MONTH, S0.OrderDateTime)?

nithins
fuente
12

Cambio:

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

A:

CONVERT(varchar(3), DATENAME(MONTH, S0.OrderDateTime)) AS OrderMonth
Jim Harris
fuente
Creo que te refieres DATENAME. DATEPARTno lo haría.
Druida
7

Prueba esto:

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

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

Dilip Chauhan
fuente
2

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

Marlon Taborda
fuente
1

Esto le dará lo que está solicitando:

select convert(varchar(3),datename(month, S0.OrderDateTime)) 
Bamidelz
fuente
1
SELECT MONTHNAME( `col1` ) FROM `table_name` 
alvin
fuente
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
Mou
fuente
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)
talones
fuente
0
DECLARE @iMonth INT=12
SELECT CHOOSE(@iMonth,'JANUARY','FEBRUARY','MARCH','APRIL','MAY','JUNE','JULY','AUGUST','SEPTEMBER','OCTOBER','NOVEMBER','DECEMBER')
Natarajan Sambantham
fuente