Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Konvertieren einer Monatsnummer in den Monatsnamen in SQL Server (T-SQL)

Sie können den folgenden T-SQL-Code verwenden, um eine Monatszahl in den entsprechenden Namen in SQL Server umzuwandeln.

Dies ist für Zeiten, in denen Sie nicht das vollständige Datum haben – wenn Sie nur die Monatsnummer haben. Wenn Sie tun das Datum haben, dann erfahren Sie hier, wie Sie den Monatsnamen aus einem Datum erhalten.

Beispiel

Sie können den Monatsnamen aus der entsprechenden Nummer erhalten, indem Sie DATENAME() verwenden Funktion in Verbindung mit DATEADD() .

Hier ist ein Beispiel, das Monat 10 (Oktober) verwendet:

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

Ergebnis:

October

Erläuterung des Kodex

Wenn Sie sich fragen, warum es ein -1 gibt im obigen Code liegt es daran, dass das Basisdatum 1900-01-01 ist (na ja, 1900-01-01 00:00:00.000 um genau zu sein).

Wenn wir 10 zu 01 addieren, erhalten wir 11, was November ist (der falsche Monat). Daher müssen wir es um 1 subtrahieren.

Das folgende Beispiel soll dies besser veranschaulichen als meine Worte. Hier sind verschiedene DATEADD() Werte, die zurückgegeben werden, je nachdem, was ich als drittes Argument verwende.

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

Ergebnis:

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

Die dritte Option gibt uns also die richtige Monatszahl, und es ist dann eine einfache Sache, DATENAME() zu verwenden um ihn in den Monatsnamen umzuwandeln.

Eine Alternative:FORMAT()

Wenn Ihnen DATENAME() nicht gefällt Funktion, können Sie sie gegen FORMAT() austauschen funktionieren stattdessen. Es gilt das gleiche Konzept.

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

Ergebnis:

October