sql >> Base de Datos >  >> RDS >> Sqlserver

Convierta un número de mes en el nombre del mes en SQL Server (T-SQL)

Puede usar el código T-SQL a continuación para convertir un número de mes a su nombre correspondiente en SQL Server.

Esto es para momentos en los que en realidad no tiene la fecha completa, cuando todo lo que tiene es el número del mes. Si haces tiene la fecha, aquí le mostramos cómo obtener el nombre del mes de una fecha.

Ejemplo

Puede obtener el nombre del mes de su número correspondiente usando DATENAME() función junto con DATEADD() .

Aquí hay un ejemplo que usa el mes 10 (octubre):

SELECT DATENAME( 
    month, 
    DATEADD( month , 10, -1 )
    );

Resultado:

October

Explicación del Código

Si te preguntas por qué hay un -1 en el código anterior, es porque la fecha base es 1900-01-01 (bueno, 1900-01-01 00:00:00.000 para ser precisos).

Si sumamos 10 a 01, obtenemos 11, que es noviembre (el mes equivocado). Por lo tanto, debemos restarlo por 1.

El siguiente ejemplo debería ilustrar esto mejor que mis palabras. Aquí hay varios DATEADD() valores que se devuelven, dependiendo de lo que use como tercer argumento.

SELECT 
  DATEADD( month, 0, 0 ) AS [Base Date],
  DATEADD( month, 10, 0 ) AS [Add 10],
  DATEADD( month, 10, -1 ) AS [Subtract 1];

Resultado:

 +-------------------------+-------------------------+-------------------------+
 | Base Date               | Add 10                  | Subtract 1              |
 |-------------------------+-------------------------+-------------------------|
 | 1900-01-01 00:00:00.000 | 1900-11-01 00:00:00.000 | 1900-10-31 00:00:00.000 |
 +-------------------------+-------------------------+-------------------------+ 

Entonces, la tercera opción nos da el número de mes correcto, y luego es una simple cuestión de usar DATENAME() para convertirlo en el nombre del mes.

Una alternativa:FORMAT()

Si no te gusta el DATENAME() puede cambiarla por FORMAT() función en su lugar. Se aplica el mismo concepto.

SELECT FORMAT( 
    DATEADD( month , 10, -1 ),
    'MMMM'
    );

Resultado:

October