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

6 Funktionen zum Abrufen von Tag, Monat und Jahr aus einem Datum in SQL Server

Transact-SQL enthält eine Reihe von Funktionen, die uns bei der Arbeit mit Datums- und Uhrzeitangaben helfen. Eine der häufigeren Aufgaben bei der Arbeit mit Datumsangaben ist das Extrahieren der verschiedenen Teile des Datums. Manchmal möchten wir zum Beispiel nur das Jahr oder den Monat. Zu anderen Zeiten möchten wir vielleicht den Wochentag. Wie auch immer, es gibt viele Möglichkeiten, dies in SQL Server zu tun.

Insbesondere die folgenden Funktionen ermöglichen es Ihnen, Tag, Monat und Jahr von einem Datum in SQL Server zurückzugeben.

  • DAY() , MONTH() , und YEAR()
  • DATEPART()
  • DATENAME()
  • FORMAT()

Diese Funktionen werden unten erklärt.

Die Funktionen DAY(), MONTH() und YEAR()

Der naheliegendste Weg, Tag, Monat und Jahr aus einem Datum zurückzugeben, ist die Verwendung der gleichnamigen T-SQL-Funktionen. Ja, T-SQL hat Funktionen, die speziell dafür gebaut wurden, diese drei Datumsteile zurückzugeben.

Hier ist ein Beispiel dafür, wie sie funktionieren:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DAY(@date) AS DAY,
    MONTH(@date) AS MONTH,
    YEAR(@date) AS YEAR;

Ergebnis:

+-------+---------+--------+
| DAY   | MONTH   | YEAR   |
|-------+---------+--------|
| 2     | 6       | 2018   |
+-------+---------+--------+

Diese Funktionen geben den Datumsteil als ganze Zahl zurück. Sie geben dasselbe Ergebnis zurück wie DATEPART() Funktion gibt für den angegebenen Datumsteil zurück.

Die DATEPART()-Funktion

Der DATEPART() Die Funktion wurde speziell für die Rückgabe bestimmter Teile eines Datums erstellt. Daher können wir diese Funktion verwenden, um genau das gleiche Ergebnis wie im vorherigen Beispiel zurückzugeben:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATEPART(day, @date) AS DAY,
    DATEPART(weekday, @date) AS WEEKDAY,
    DATEPART(month, @date) AS MONTH,
    DATEPART(year, @date) AS YEAR;

Ergebnis:

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | 7         | 6       | 2018   |
+-------+-----------+---------+--------+

Ein Vorteil der Verwendung dieser Funktion besteht darin, dass Sie auch andere Teile des Datums und der Uhrzeit zurückgeben können. Wie Sie an diesem Beispiel sehen können, habe ich sowohl den Wochentag als auch den Tag zurückgegeben (day ist der Tag des Monats, weekday ist der Wochentag). Sie können auch die verschiedenen Zeitteile wie Minuten, Sekunden, Millisekunden usw. zurückgeben. Weitere Beispiele finden Sie unter DATEPART() Beispiele in SQL Server.

Der DATEPART() Die Funktion gibt ihr Ergebnis als Ganzzahl zurück, und daher können Sie den Monats- oder Wochentagsnamen nicht aus dem Datum erhalten. Aber keine Sorge, Sie können den DATENAME() verwenden oder FORMAT() Funktionen dafür.

Die DATENAME()-Funktion

Der DATENAME() Funktion ähnelt der DATEPART() -Funktion, außer dass sie das Ergebnis als Zeichenfolge statt als Ganzzahl zurückgibt. DATENAME() gibt auch Monat und Wochentag als vollständigen Namen und nicht als numerischen Wert zurück.

Beispiel:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATENAME(day, @date) AS DAY,
    DATENAME(weekday, @date) AS WEEKDAY,
    DATENAME(month, @date) AS MONTH,
    DATENAME(year, @date) AS YEAR;

Ergebnis:

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | Saturday  | June    | 2018   |
+-------+-----------+---------+--------+

Weitere Beispiele dieser Funktion finden Sie unter DATENAME() Beispiele in SQL Server.

Die FORMAT()-Funktion

Wir können das FORMAT() verwenden Funktion, um dieselben Werte wie bei DATENAME() zurückzugeben Funktion und mehr.

Dies ist eine vielseitigere Funktion als die vorherigen. Es erlaubt Ihnen, Datum/Uhrzeit sowie numerische Werte als Zeichenfolgen zu formatieren. Der Rückgabewert ist entweder nvarchar oder null (je nach Eingabe), und die Länge der Zeichenfolge wird durch das angegebene Format bestimmt.

FORMAT() bietet auch mehr Optionen für die Darstellung des Datumsteils. Sie können angeben, ob es als ein einzelnes Zeichen, zwei Zeichen, drei, vier und in einigen Fällen sogar fünf Zeichen angezeigt werden soll.

Hier sind Beispiele zur Veranschaulichung.

Tag

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS d,
    FORMAT(@date, 'dd') AS dd,
    FORMAT(@date, 'ddd') AS ddd,
    FORMAT(@date, 'dddd') AS dddd;

Ergebnis:

+-----+------+-------+----------+
| d   | dd   | ddd   | dddd     |
|-----+------+-------+----------|
| 2   | 02   | Sat   | Saturday |
+-----+------+-------+----------+

Monat

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'M ') AS M,
    FORMAT(@date, 'MM') AS MM,
    FORMAT(@date, 'MMM') AS MMM,
    FORMAT(@date, 'MMMMM') AS MMMM;

Ergebnis:

+-----+------+-------+--------+
| M   | MM   | MMM   | MMMM   |
|-----+------+-------+--------|
| 6   | 06   | Jun   | June   |
+-----+------+-------+--------+

Jahr

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;

Ergebnis:

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 18  | 18   | 2018  | 2018   | 02018   |
+-----+------+-------+--------+---------+

Beachten Sie, dass wir die Möglichkeit haben, den Jahresabschnitt als fünf Ziffern zu formatieren.

Über die Anzahl der Ziffern

Wenn ein Datumsteil in Ziffernform zurückgegeben wird, bestimmt der Formatbezeichner die Mindestanzahl der zurückzugebenden Ziffern. Zum Beispiel bei der Verwendung von  yyy , wird das Jahr dreistellig zurückgegeben, wenn das Jahr 0008 ist aber vierstellig, wenn das Jahr 2008 ist .

Beispiel:

DECLARE @date datetime2 = '0008-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;  

Ergebnis:

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 8   | 08   | 008   | 0008   | 00008   |
+-----+------+-------+--------+---------+

Auch bei Verwendung der einzelnen Option (z. B. d ) als Datumsbezeichner müssen Sie ein Leerzeichen hinzufügen, wenn Sie nur diesen Datumsteil selbst zurückgeben möchten. Wenn Sie dies nicht tun, erhalten Sie mehr als diesen einen Datumsteil.

Beispiel:

DECLARE @date datetime2 = '2008-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS 'Space',
    FORMAT(@date, 'd') AS 'No Space',
    FORMAT(@date, 'M ') AS 'Space',
    FORMAT(@date, 'M') AS 'No Space',
    FORMAT(@date, 'y ') AS 'Space',
    FORMAT(@date, 'y') AS 'No Space';

Ergebnis:

+---------+------------+---------+------------+---------+------------+
| Space   | No Space   | Space   | No Space   | Space   | No Space   |
|---------+------------+---------+------------+---------+------------|
| 2       | 6/2/2008   | 6       | June 2     | 8       | June 2008  |
+---------+------------+---------+------------+---------+------------+

Für mehr FORMAT() Beispiele finden Sie unter Formatieren von Datum und Uhrzeit in SQL Server.