DATEPART (Transact-SQL)
Gibt eine ganze Zahl zurück, die den angegebenen datepart-Wert des angegebenen date-Werts darstellt.
Eine Übersicht über alle Datums- und Uhrzeitdatentypen und zugehörigen Funktionen von Transact-SQL finden Sie unter Datums- und Uhrzeitdatentypen und zugehörige Funktionen (Transact-SQL).
Transact-SQL-Syntaxkonventionen
Syntax
DATEPART ( datepart , date )
Argumente
datepart
Der Teil von date (ein Datum oder ein Uhrzeitwert), für den ein integer zurückgegeben wird. In der folgenden Tabelle sind alle gültigen datepart-Argumente aufgelistet. Benutzerdefinierte Variablenentsprechungen sind nicht gültig.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 time-Wert, date-Wert, smalldatetime-Wert, datetime-Wert, datetime2-Wert oder datetimeoffset-Wert aufgelöst werden kann. date kann ein Ausdruck, ein Spaltenausdruck, eine benutzerdefinierte Variable oder ein Zeichenfolgenliteral sein.Verwenden Sie vierstellige Jahreszahlen, um Mehrdeutigkeit zu vermeiden. Informationen zu zweistelligen Jahreszahlen finden Sie unter Konfigurieren der Serverkonfigurationsoption Umstellungsjahr für Angaben mit zwei Ziffern.
Rückgabetyp
int
Rückgabewert
Jedes datepart-Argument und die zugehörigen Abkürzungen geben denselben Wert zurück.
Der Rückgabewert hängt von der Sprachumgebung ab, die durch SET LANGUAGE und durch die Konfigurieren der Serverkonfigurationsoption Standardsprache der Anmeldung festgelegt wurde. Wenn date ein Zeichenfolgenliteral für einige Formate darstellt, hängt der Rückgabewert von dem Format ab, das mit SET DATEFORMAT festgelegt wurde. SET DATEFORMAT wirkt sich nicht auf den Rückgabewert aus, wenn das Datum ein Spaltenausdruck für Daten vom Typ Datum oder Uhrzeit darstellt.
In der folgenden 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. Der Datentyp des date-Arguments ist datetimeoffset(7). Der nanosecond datepart-Rückgabewert verfügt über 9 Dezimalstellen (,123456700), wobei die letzten beiden Stellen immer 00 sind.
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 |
45 |
weekday, dw |
1 |
hour, hh |
12 |
minute, n |
15 |
second, ss, s |
32 |
millisecond, ms |
123 |
microsecond, mcs |
123456 |
nanosecond, ns |
123456700 |
TZoffset, tz |
310 |
datepart-Argumente des Typs week und weekday
Wenn für datepart entweder week (wk, ww) oder weekday (dw) angegeben wurde, hängt der Rückgabewert von dem Wert ab, der durch SET DATEFIRST festgelegt wurde.
Der 1. Januar eines Jahres definiert die Anfangszahl für week datepart, z. B. DATEPART (wk, 'Jan 1, xxxx') = 1, wobei xxxx ein beliebiges Jahr ist.
In der folgenden Tabelle wird für jedes SET DATEFIRST-Argument der Rückgabewert von week und weekday datepart für "2007-04-21" aufgelistet. Der 1. Januar ist im Jahr 2007 ein Montag. Der 21. April ist im Jahr 2007 ein Samstag. SET DATEFIRST 7 (Sonntag) ist die Standardeinstellung für Englisch (USA). Englisch.
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), (month, date) und DATEPART (day, date) zurückgegebenen Werte entsprechen den jeweiligen Rückgabewerten der Funktionen YEAR, MONTH und DAY.
ISO_WEEK datepart
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 startet die Woche 1 im Jahr 2004 (2004W01) am 29. Dezember 2003 (Montag) und endet am 4. Januar 2004 (Sonntag). Die höchste Wochennummer kann in einem Jahr 52 oder 53 sein. Diese Art der Nummerierung wird in der Regel in europäischen Ländern bzw. Regionen verwendet. In anderen Ländern wird sie eher selten angewendet.
Das Nummerierungssystem in anderen Ländern oder Regionen entspricht möglicherweise nicht dem ISO-Standard. Es gibt mindestens sechs Möglichkeiten, wie in der folgenden Tabelle dargestellt.
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 Großbritannien |
Montag |
4. Januar Erster Donnerstag 4–7 Tage im Jahr |
Nein |
ISO 8601, Norwegen und Schweden |
Montag |
7. Januar Erster Montag 7 Tage im Jahr |
Nein |
|
Mittwoch |
1. Januar Erster Dienstag 1–7 Tage im Jahr |
Ja |
|
Samstag |
1. Januar Erster Freitag 1–7 Tage im Jahr |
Ja |
TZoffset
TZoffset (tz) wird als Anzahl von Minuten (signiert) zurückgegeben. Die folgende Anweisung gibt ein Zeitzonenoffset von 310 Minuten zurück.
SELECT DATEPART (TZoffset, 2007-05-10 00:00:01.1234567 +05:10);
Wenn das datepart-Argument TZoffset (tz) lautet und das date-Argument nicht dem Datentyp datetimeoffset entspricht, wird NULL zurückgegeben.
date-Argument des Typs smalldatetime
Wenn date den Wert smalldatetime aufweist, werden Sekunden als 00 zurückgegeben.
Zurückgeben des Standardwerts für ein datepart-Argument, das nicht in einem date-Argument enthalten ist
Enthält der Datentyp im date-Argument keine Angabe zu datepart, wird für datepart nur der Standardwert zurückgegeben, 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. Die folgende 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 verfügt, wird der Fehler 9810 zurückgegeben. Im folgenden Codebeispiel tritt ein Fehler auf, weil das year-Datumsteil für den für die @t-Variable deklarierten time-Datentyp nicht gültig ist.
DECLARE @t time = '12:10:30.123';
SELECT DATEPART(year, @t);
Sekundenbruchteile
Die folgenden Anweisungen verdeutlichen, wie Sekundenbruchteile zurückgegeben werden:
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
Hinweise
DATEPART kann in den Klauseln WHERE, HAVING, GROUP BY und ORDER BY der SELECT-Liste verwendet werden.
In SQL Server 2012 wandelt DATEPART Zeichenfolgenliterale implizit als datetime2-Typ um. Daher unterstützt DATEPART das Format YDM nicht, wenn das Datum als Zeichenfolge übergeben wird. Sie müssen die Zeichenfolge explizit in den datetime-Typ oder smalldatetime-Typ umwandeln, um das YDM-Format zu verwenden.
Beispiele
Das folgende Beispiel gibt das Basisjahr zurück. Das Basisjahr ist für Datumsberechnungen nützlich. Im Beispiel wird das Datum in Form einer Zahl angegeben. 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 */