Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Converti un numero del mese nel nome del mese in SQL Server (T-SQL)

È possibile utilizzare il codice T-SQL riportato di seguito per convertire un numero di mese nel nome corrispondente in SQL Server.

Questo è per i momenti in cui non hai effettivamente la data completa, quando tutto ciò che hai è il numero del mese. Se fai hai la data, quindi ecco come ottenere il nome del mese da una data.

Esempio

Puoi ottenere il nome del mese dal numero corrispondente utilizzando il DATENAME() funzione insieme a DATEADD() .

Ecco un esempio che utilizza il mese 10 (ottobre):

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

Risultato:

October

Spiegazione del Codice

Se ti stai chiedendo perché c'è un -1 nel codice sopra, è perché la data di base è 1900-01-01 (beh, 1900-01-01 00:00:00.000 per essere precisi).

Se aggiungiamo 10 a 01, otteniamo 11, che è novembre (il mese sbagliato). Quindi dobbiamo sottrarlo per 1.

Il seguente esempio dovrebbe illustrarlo meglio delle mie parole. Ecco vari DATEADD() valori che vengono restituiti, a seconda di ciò che utilizzo come terzo argomento.

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

Risultato:

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

Quindi la terza opzione ci fornisce il numero del mese corretto, ed è quindi una semplice questione di utilizzare DATENAME() per convertirlo nel nome del mese.

Un'alternativa:FORMAT()

Se non ti piace DATENAME() funzione, puoi scambiarlo con FORMAT() funzione invece. Vale lo stesso concetto.

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

Risultato:

October