sql >> Databasteknik >  >> RDS >> Sqlserver

Konvertera ett månadsnamn till månadsnummer i SQL Server (T-SQL)

I SQL Server kan du använda MONTH() funktion för att konvertera ett månadsnamn till dess motsvarande nummer.

Exempel

Här är ett exempel på att konvertera ett månadsnamn till månadsnummer.

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

Resultat:

9

Det jag gör här är i princip att tillverka ett "datum" (som inkluderar min angivna månad) så att SQL Server inte skickar ett fel när du använder MONTH() funktion utan giltigt datum.

Den här funktionen accepterar alla uttryck som kan lösas till en tid , datum , smalldatetime , datumtid , datetime2 , eller datumtidsförskjutning värde. Det kan vara ett uttryck, kolumnuttryck, användardefinierad variabel eller bokstavlig sträng.

Mer "Date-Like"

Du kan också ge ett mer "datumliknande" argument genom att göra något så här:

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

Resultat:

9

Nuvarande dag och år

Eller om du föredrar att använda den aktuella dagen och året kan du göra något så här:

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

Resultat:

9

Bara för att vara tydlig, om inte den angivna månaden är densamma som den aktuella månaden, kommer du att sluta med ett annat datum än det aktuella datumet.

Här är ett exempel för att illustrera vad jag menar:

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

Resultat:

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

Jag körde den här frågan den 22 mars 2020, men det ändrade datumet är den 22 september 2020.

Oavsett vilket returneras rätt månadsnummer när vi använder MONTH() .


  1. Felsökning av problem när du arbetar med datum och tid i SQL Server

  2. Oracle Sequence nextval hoppar nummer fram och tillbaka

  3. Dela upp stor text/CSV-fil i flera filer i PL SQL

  4. Ett sätt att extrahera data från ett DateTime-värde utan sekunder