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

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

In SQL Server puoi utilizzare MONTH() funzione per convertire il nome di un mese nel numero corrispondente.

Esempio

Ecco un esempio di conversione del nome di un mese nel numero del mese.

SELECT MONTH('September' + '1,1');

Risultato:

9

Quello che sto facendo qui è fondamentalmente fabbricare una "data" (che include il mio mese specificato) in modo che SQL Server non generi un errore quando si utilizza MONTH() funzione senza una data valida.

Questa funzione accetta qualsiasi espressione che può essere risolta in un tempo , data , smalldatetime , data e ora , dataora2 o datetimeoffset valore. Può essere un'espressione, un'espressione di colonna, una variabile definita dall'utente o una stringa letterale.

Più "tipo data"

Potresti anche fornire un argomento più "simile a una data" facendo qualcosa del genere:

SELECT MONTH('September' + ' 01, 1900');

Risultato:

9

Giorno e anno correnti

Oppure, se preferisci utilizzare il giorno e l'anno correnti, potresti fare qualcosa del genere:

SELECT MONTH('September' + FORMAT(GETDATE(), 'd,y'));

Risultato:

9

Solo per essere chiari, a meno che il mese specificato non sia lo stesso del mese corrente, ti ritroverai con una data diversa da quella corrente.

Ecco un esempio per illustrare cosa intendo:

SELECT 
  FORMAT(GETDATE(), 'MMMM d, yyyy') AS [Today],
  'September' + FORMAT(GETDATE(), ' d, yyyy') AS [Modified],
  MONTH('September' + FORMAT(GETDATE(), ' d, yyyy')) AS [Month Number];

Risultato:

 +----------------+--------------------+----------------+
 | Today          | Modified           | Month Number   |
 |----------------+--------------------+----------------|
 | March 22, 2020 | September 22, 2020 | 9              |
 +----------------+--------------------+----------------+ 

Ho eseguito questa query il 22 marzo 2020, ma la data modificata è il 22 settembre 2020.

Indipendentemente da ciò, quando utilizziamo MONTH() viene restituito il numero del mese corretto .