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