DATEPART (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Diese Funktion gibt eine ganze Zahl zurück, die das angegebene datepart-Argument des angegebenen date-Arguments darstellt.

Eine Übersicht über alle Datums- und Uhrzeitdatentypen und zugehörigen Funktionen für Transact-SQL finden Sie unter Datums- und Uhrzeitdatentypen und zugehörige Funktionen (Transact-SQL).

Transact-SQL-Syntaxkonventionen

Syntax

DATEPART ( datepart , date )  

Argumente

datepart
Der bestimmte Teil des date-Arguments, für das DATEPART eine ganze Zahl zurückgibt. In der folgenden Tabelle werden alle gültigen datepart-Argumente aufgeführt.

Hinweis

DATEPART akzeptiert keine benutzerdefinierten Variablenentsprechungen für die datepart-Argumente.

datepart Abkürzungen
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
weekday dw
hour hh
minute mi, n
second ss, s
millisecond ms
microsecond mcs
nanosecond ns
tzoffset tz
iso_week isowk, isoww

date
Ein Ausdruck, der in einen der folgenden Datentypen aufgelöst werden kann:

  • date
  • datetime
  • datetimeoffset
  • datetime2
  • smalldatetime
  • time

Bei date akzeptiert DATEPART einen Spaltenausdruck, einen Ausdruck, ein Zeichenfolgenliteral oder eine benutzerdefinierte Variable. Um Mehrdeutigkeiten zu vermeiden, sollten Sie vierstellige Jahreszahlen verwenden. Unter Konfigurieren der Serverkonfigurationsoption „Umstellungsjahr für Angaben mit zwei Ziffern“ finden Sie weitere Informationen zu zweistelligen Jahreszahlen.

Rückgabetyp

INT

Rückgabewert

Jedes datepart-Argument und die jeweils zugehörigen Abkürzungen geben den gleichen Wert zurück.

Der Rückgabewert hängt von der Sprachumgebung ab, die durch SET LANGUAGE und durch die Konfiguration der Serverkonfigurationsoption „Standardsprache“ für die Anmeldung festgelegt wurde. Der Rückgabewert hängt von SET DATEFORMAT ab, wenn date ein Zeichenfolgenliteral einiger Formate darstellt. SET DATEFORMAT ändert den Rückgabewert nicht, wenn das Datum einen Spaltenausdruck eines Datums- oder Uhrzeittyps darstellt.

In dieser Tabelle werden alle datepart-Argumente mit den entsprechenden Rückgabewerten für die Anweisung SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10') aufgelistet. Das date-Argument weist den Datentyp datetimeoffset(7) auf. Die letzten beiden Stellen des Rückgabewerts des datepart-Arguments nanosecond sind immer 00, und dieser Wert verfügt über 9 Dezimalstellen:

,123456700

datepart Rückgabewert
year, yyyy, yy 2007
quarter, qq, q 4
month, mm, m 10
dayofyear, dy, y 303
day, dd, d 30
week, wk, ww 44
weekday, dw 3
hour, hh 12
minute, n 15
second, ss, s 32
millisecond, ms 123
microsecond, mcs 123456
nanosecond, ns 123456700
tzoffset, tz 310
iso_week, isowk, isoww 44

datepart-Argumente des Typs week und weekday

Für das datepart-Argument week (wk, ww) oder weekday (dw) hängt der Rückgabewert DATEPART von dem von SET DATEFIRST festgelegten Wert ab.

Der 1. Januar eines Jahres definiert die Anfangszahl für week datepart. Zum Beispiel:

DATEPART (wk, 'Jan 1, xxxx') = 1

Hierbei steht xxxx für ein beliebiges Jahr.

In dieser Tabelle wird für jedes „SET DATEFIRST“-Argument der Rückgabewert der datepart-Argumente week und weekday für '2007-04-21' aufgelistet. Der 1. Januar 2007 ist ein Montag. Der 21. April 2007 ist ein Sonntag. Für Englisch (USA) dient

SET DATEFIRST 7 -- ( Sunday )

als Standardeinstellung. Nachdem Sie DATEFIRST festgelegt haben, verwenden Sie diese empfohlene SQL-Anweisung für die datepart-Tabellenwerte:

SELECT DATEPART(week, '2007-04-21 '), DATEPART(weekday, '2007-04-21 ')

SET DATEFIRST

Argument
week

hat zurückgegeben
weekday

hat zurückgegeben
1 16 6
2 17 5
3 17 4
4 17 3
5 17 2
6 17 1
7 16 7

datepart-Argumente des Typs year, month und day

Die für DATEPART (year, date), DATEPART (month, date) und DATEPART (day, date) zurückgegebenen Werte entsprechen den jeweiligen Rückgabewerten der Funktionen YEAR, MONTH und DAY.

datepart-Argument „iso_week“

ISO 8601 schließt das ISO-Wochensystem zur Nummerierung von Wochen ein. Die einzelnen Wochen werden mit dem Jahr verknüpft, in dem Donnerstag auftritt. Beispielsweise beginnt die Woche 1 im Jahr 2004 (2004W01) am 29. Dezember 2003 (Montag) und endet am 4. Januar 2004 (Sonntag). Diese Art der Nummerierung wird in der Regel in europäischen Ländern und Regionen verwendet. In nicht europäischen Ländern und Regionen ist sie nicht gängig.

Hinweis: Die höchste Wochennummer in einem Jahr kann 52 oder 53 sein.

Das Nummerierungssystem anderer Länder oder Regionen entspricht möglicherweise nicht dem ISO-Standard. Diese Tabelle stellt sechs Möglichkeiten dar:

Erster Tag der Woche Erste Woche im Jahr enthält Doppelt zugewiesene Wochen Verwendet von/in
Sonntag 1\. Januar

Erster Samstag

1–7 Tage im Jahr
Ja USA
Montag 1\. Januar

Erster Sonntag

1–7 Tage im Jahr
Ja Die meisten Länder Europas und das Vereinigte Königreich
Montag 4\. Januar

Erster Donnerstag

4–7 Tage im Jahr
Nein ISO 8601, Norwegen und Schweden
Montag 7\. Januar,

Erster Montag

Sieben Tage des Jahres
Nein
Wednesday 1\. Januar

Erster Dienstag

1–7 Tage im Jahr
Ja
Samstag 1\. Januar

Erster Freitag

1–7 Tage im Jahr
Ja

tzoffset

DATEPART gibt den tzoffset-Wert (tz) als Anzahl von Minuten (mit Vorzeichen) zurück. Diese Anweisung gibt einen Zeitzonenoffset von 310 Minuten zurück:

SELECT DATEPART (tzoffset, '2007-05-10  00:00:01.1234567 +05:10');  

DATEPART rendert den „tzoffset“-Wert folgendermaßen:

  • Für „datetimeoffset“ und „datetime2“ gibt „tzoffset“ den Zeitoffset in Minuten zurück, wobei der Offset für „datetime2“ immer 0 Minuten beträgt.
  • Für Datentypen, die implizit in datetimeoffset oder datetime2 konvertiert werden können, gibt DATEPART den Zeitoffset in Minuten an. Eine Ausnahme stellen andere Datums- und Uhrzeitdatentypen dar.
  • Parameter aller anderen Typen führen zu einem Fehler.

date-Argument des Typs smalldatetime

Für den date-Wert smalldatetime gibt DATEPART die Sekunden als 00 zurück.

Zurückgeben des Standardwerts für ein datepart-Argument, das nicht in einem date-Argument enthalten ist

Enthält der Datentyp des date-Arguments keine Angabe zu datepart, gibt DATEPART den Standardwert für datepart nur zurück, wenn für date ein Literal angegeben ist.

Beispielsweise wird bei Jahr-Monat-Tag für jeden date-Datentyp standardmäßig der Wert 1900-01-01 angegeben. Diese Anweisung verfügt über datepart-Argumente für datepart, ein time-Argument für date und gibt 1900, 1, 1, 1, 2 zurück.

SELECT DATEPART(year, '12:10:30.123')  
    ,DATEPART(month, '12:10:30.123')  
    ,DATEPART(day, '12:10:30.123')  
    ,DATEPART(dayofyear, '12:10:30.123')  
    ,DATEPART(weekday, '12:10:30.123');  

Wenn date als Variable oder Tabellenspalte angegeben ist und der Datentyp für diese Variable oder Spalte nicht über das angegebene datepart-Argument verfügt, gibt DATEPART den Fehler 9810 zurück. Im folgenden Beispiel hat die Variable @t den Datentyp time. Bei der Ausführung würde ein Fehler auftreten, weil der Datumsteil „year“ für den time-Datentyp ungültig ist:

DECLARE @t time = '12:10:30.123';   
SELECT DATEPART(year, @t);  

Sekundenbruchteile

Diese Anweisungen veranschaulichen, dass DATEPART Sekundenbruchteile zurückgibt:

SELECT DATEPART(millisecond, '00:00:01.1234567'); -- Returns 123  
SELECT DATEPART(microsecond, '00:00:01.1234567'); -- Returns 123456  
SELECT DATEPART(nanosecond,  '00:00:01.1234567'); -- Returns 123456700  

Bemerkungen

DATEPART kann in den Klauseln SELECT , WHERE, HAVING, GROUP BY und ORDER BY verwendet werden.

In SQL Server 2008 (10.0.x) und höher wandelt DATEPART Zeichenfolgenliterale implizit in den datetime2-Typ um. Daher unterstützt DATENAME das Format YDM nicht, wenn das Datum als Zeichenfolge übergeben wird. Sie müssen die Zeichenfolge explizit in den Typ datetime oder smalldatetime umwandeln, um das YDM-Format zu verwenden.

Beispiele

In diesem Beispiel wird das Basisjahr zurückgegeben. Das Basisjahr ist bei Datumsberechnungen nützlich. Im Beispiel gibt eine Zahl das Datum an. Beachten Sie, dass SQL Server den Wert 0 als 1. Januar 1900 interpretiert.

SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);  

-- Returns: 1900    1    1 

In diesem Beispiel wird der Tag des Datums (12/20/1974) zurückgegeben.

-- Uses AdventureWorks  
  
SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer;  

-- Returns: 20

In diesem Beispiel wird das Jahr des Datums (12/20/1974) zurückgegeben.

-- Uses AdventureWorks  
  
SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer;  

-- Returns: 1974

Weitere Informationen

CAST und CONVERT (Transact-SQL)DATETRUNC