Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Convertir un numéro de mois en nom de mois dans SQL Server (T-SQL)

Vous pouvez utiliser le code T-SQL ci-dessous pour convertir un numéro de mois en son nom correspondant dans SQL Server.

C'est pour les moments où vous n'avez pas réellement la date complète - quand tout ce que vous avez est le numéro du mois. Si vous faites avoir la date, alors voici comment obtenir le nom du mois à partir d'une date.

Exemple

Vous pouvez obtenir le nom du mois à partir de son numéro correspondant en utilisant le DATENAME() fonction en conjonction avec DATEADD() .

Voici un exemple qui utilise le mois 10 (octobre) :

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

Résultat :

October

Explication du code

Si vous vous demandez pourquoi il y a un -1 dans le code ci-dessus, c'est parce que la date de base est 1900-01-01 (enfin, 1900-01-01 00:00:00.000 pour être précis).

Si nous ajoutons 10 à 01, nous obtenons 11, qui est novembre (le mauvais mois). Par conséquent, nous devons le soustraire de 1.

L'exemple suivant devrait illustrer cela mieux que mes mots. Voici divers DATEADD() valeurs qui sont renvoyées, en fonction de ce que j'utilise comme troisième argument.

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

Résultat :

 +-------------------------+-------------------------+-------------------------+
 | 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 |
 +-------------------------+-------------------------+-------------------------+ 

Ainsi, la troisième option nous donne le bon numéro de mois, et il suffit alors d'utiliser DATENAME() pour le convertir en nom de mois.

Une alternative :FORMAT()

Si vous n'aimez pas le DATENAME() fonction, vous pouvez l'échanger pour le FORMAT() fonction à la place. Le même concept s'applique.

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

Résultat :

October