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?


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)

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)?


12

Cambio:

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

A:

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

Creo que te refieres DATENAME. DATEPARTno lo haría.
Druida


2

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



1

Esto le dará lo que está solicitando:

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

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)

0
DECLARE @iMonth INT=12
SELECT CHOOSE(@iMonth,'JANUARY','FEBRUARY','MARCH','APRIL','MAY','JUNE','JULY','AUGUST','SEPTEMBER','OCTOBER','NOVEMBER','DECEMBER')
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.