DATEPART (Transact-SQL)DATEPART (Transact-SQL)

GILT FÜR: jaSQL Server (ab 2008) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Diese Funktion gibt eine ganze Zahl zurück, die das angegebene datepart-Argument des angegebenen date-Arguments darstellt.This function returns an integer representing the specified datepart of the specified date.

Unter Datums- und Uhrzeitdatentypen und zugehörige Funktionen (Transact-SQL) finden Sie eine Übersicht über alle Transact-SQLTransact-SQL Datums- und Uhrzeitdatentypen und zugehörige Funktionen.See Date and Time Data Types and Functions (Transact-SQL) for an overview of all Transact-SQLTransact-SQL date and time data types and functions.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

DATEPART ( datepart , date )  

ArgumenteArguments

datepartdatepart
Der bestimmte Teil des date-Arguments, für das DATEPART eine ganze Zahl zurückgibt.The specific part of the date argument for which DATEPART will return an integer. In der folgenden Tabelle werden alle gültigen datepart-Argumente aufgeführt.This table lists all valid datepart arguments.

Hinweis

DATEPART akzeptiert keine benutzerdefinierten Variablenentsprechungen für die datepart-Argumente.DATEPART does not accept user-defined variable equivalents for the datepart arguments.

datepartdatepart AbkürzungenAbbreviations
yearyear yy, yyyyyy, yyyy
quarterquarter qq, qqq, q
monthmonth mm, mmm, m
dayofyeardayofyear dy, ydy, y
dayday dd, ddd, d
weekweek wk, wwwk, ww
weekdayweekday dwdw
hourhour hhhh
minuteminute mi, nmi, n
secondsecond ss, sss, s
millisecondmillisecond msms
microsecondmicrosecond mcsmcs
nanosecondnanosecond nsns
TZoffsetTZoffset tztz
ISO_WEEKISO_WEEK isowk, isowwisowk, isoww

Datumdate
Ein Ausdruck, der in einen der folgenden Datentypen aufgelöst werden kann:An expression that resolves to one of the following data types:

  • Datumdate
  • datetimedatetime
  • datetimeoffsetdatetimeoffset
  • datetime2datetime2
  • smalldatetimesmalldatetime
  • Uhrzeittime

Bei date akzeptiert DATEPART einen Spaltenausdruck, einen Ausdruck, ein Zeichenfolgenliteral oder eine benutzerdefinierte Variable.For date, DATEPART will accept a column expression, expression, string literal, or user-defined variable. Um Mehrdeutigkeiten zu vermeiden, sollten Sie vierstellige Jahreszahlen verwenden.Use four-digit years to avoid ambiguity issues. Unter Konfigurieren der Serverkonfigurationsoption „Umstellungsjahr für Angaben mit zwei Ziffern“ finden Sie weitere Informationen zu zweistelligen Jahreszahlen.See Configure the two digit year cutoff Server Configuration Option for information about two-digit years.

RückgabetypReturn Type

intint

RückgabewertReturn Value

Jedes datepart-Argument und die zugehörigen Abkürzungen geben den gleichen Wert zurück.Each datepart and its abbreviations return the same value.

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.The return value depends on the language environment set by using SET LANGUAGE, and by the Configure the default language Server Configuration Option of the login. Der Rückgabewert hängt von SET DATEFORMAT ab, wenn date ein Zeichenfolgenliteral einiger Formate darstellt.The return value depends on SET DATEFORMAT if date is a string literal of some formats. SET DATEFORMAT ändert den Rückgabewert nicht, wenn das Datum ein Spaltenausdruck für Daten vom Typ Datum oder Uhrzeit darstellt.SET DATEFORMAT does not change the return value when the date is a column expression of a date or time data type.

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.This table lists all datepart arguments, with corresponding return values, for the statement SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10'). Das date-Argument weist den Datentyp datetimeoffset(7) auf.The date argument has a datetimeoffset(7) data type. Die letzten beiden Stellen des Rückgabewerts des datepart-Arguments nanosecond sind immer 00, und dieser Wert verfügt über 9 Dezimalstellen:The last two positions of the nanosecond datepart return value are always 00 and this value has a scale of 9:

,123456700.123456700

datepartdatepart RückgabewertReturn value
year, yyyy, yyyear, yyyy, yy 20072007
quarter, qq, qquarter, qq, q 44
month, mm, mmonth, mm, m 1010
dayofyear, dy, ydayofyear, dy, y 303303
day, dd, dday, dd, d 3030
week, wk, wwweek, wk, ww 4545
weekday, dwweekday, dw 11
hour, hhhour, hh 1212
minute, nminute, n 1515
second, ss, ssecond, ss, s 3232
millisecond, msmillisecond, ms 123123
microsecond, mcsmicrosecond, mcs 123456123456
nanosecond, nsnanosecond, ns 123456700123456700
TZoffset, tzTZoffset, tz 310310

datepart-Argumente des Typs week und weekdayWeek and weekday datepart arguments

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.For a week (wk, ww) or weekday (dw) datepart, the DATEPART return value depends on the value set by SET DATEFIRST.

Der 1. Januar eines Jahres definiert die Anfangszahl für weekdatepart.January 1 of any year defines the starting number for the weekdatepart. Zum Beispiel:For example:

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

Hierbei steht xxxx für ein beliebiges Jahr.where xxxx is any year.

Diese Tabelle enthält den Rückgabewert für die datepart-Argumente week und weekday fürThis table shows the return value for the week and weekday datepart for

'2007-04-21''2007-04-21 '

für jedes SET DATEFIRST-Argument.for each SET DATEFIRST argument. Der 1. Januar 2007 ist ein Montag.January 1, 2007 falls on a Monday. Der 21. April 2007 ist ein Sonntag.April 21, 2007 falls on a Saturday. Für Englisch (USA) dientFor U.S. English,

SET DATEFIRST 7 -- ( Sunday )SET DATEFIRST 7 -- ( Sunday )

als Standardeinstellung.serves as the default. Nachdem Sie DATEFIRST festgelegt haben, verwenden Sie diese empfohlene SQL-Anweisung für die datepart-Tabellenwerte:After setting DATEFIRST, use this suggested SQL statement for the datepart table values:

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

SET DATEFIRSTSET DATEFIRST

Argumentargument
weekweek

hat zurückgegebenreturned
weekdayweekday

hat zurückgegebenreturned
11 1616 66
22 1717 55
33 1717 44
44 1717 33
55 1717 22
66 1717 11
77 1616 77

datepart-Argumente des Typs year, month und dayyear, month, and day datepart Arguments

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.The values that are returned for DATEPART (year, date), DATEPART (month, date), and DATEPART (day, date) are the same as those returned by the functions YEAR, MONTH, and DAY, respectively.

ISO_WEEK datepartISO_WEEK datepart

ISO 8601 schließt das ISO-Wochensystem zur Nummerierung von Wochen ein.ISO 8601 includes the ISO week-date system, a numbering system for weeks. Die einzelnen Wochen werden mit dem Jahr verknüpft, in dem Donnerstag auftritt.Each week is associated with the year in which Thursday occurs. Beispielsweise beginnt die Woche 1 im Jahr 2004 (2004W01) am 29. Dezember 2003 (Montag) und endet am 4. Januar 2004 (Sonntag).For example, week 1 of 2004 (2004W01) covered Monday, 29 December 2003 to Sunday, 4 January 2004. Europäische Länder und Regionen verwenden üblicherweise diese Art der Nummerierung.European countries / regions typically use this style of numbering. Nichteuropäische Länder und Regionen verwenden diese üblicherweise nicht.Non-European countries / regions typically do not use it.

Hinweis: Die höchste Wochennummer in einem Jahr kann 52 oder 53 sein.Note: the highest week number in a year could be either 52 or 53.

Das Nummerierungssystem anderer Länder oder Regionen entspricht möglicherweise nicht dem ISO-Standard.The numbering systems of different countries/regions might not comply with the ISO standard. Diese Tabelle stellt sechs Möglichkeiten dar:This table shows six possibilities:

Erster Tag der WocheFirst day of week Erste Woche im Jahr enthältFirst week of year contains Doppelt zugewiesene WochenWeeks assigned two times Verwendet von/inUsed by/in
SonntagSunday 1. Januar1 January,

Erster SamstagFirst Saturday,

1–7 Tage im Jahr1-7 days of year
BenutzerkontensteuerungYes United StatesUnited States
MontagMonday 1. Januar1 January,

Erster SonntagFirst Sunday,

1–7 Tage im Jahr1-7 days of year
BenutzerkontensteuerungYes Die meisten Länder Europas und das Vereinigte KönigreichMost of Europe and the United Kingdom
MontagMonday 4. Januar4 January,

Erster DonnerstagFirst Thursday,

4–7 Tage im Jahr4-7 days of year
neinNo ISO 8601, Norwegen und SchwedenISO 8601, Norway, and Sweden
MontagMonday 7. Januar,7 January,

Erster MontagFirst Monday,

7 Tage im Jahr7 days of year
neinNo
MittwochWednesday 1. Januar1 January,

Erster DienstagFirst Tuesday,

1–7 Tage im Jahr1-7 days of year
BenutzerkontensteuerungYes
SamstagSaturday 1. Januar1 January,

Erster FreitagFirst Friday,

1–7 Tage im Jahr1-7 days of year
BenutzerkontensteuerungYes

TZoffsetTZoffset

DATEPART gibt den Wert TZoffset (tz) als Anzahl der Minuten (mit Vorzeichen) zurück.DATEPART returns the TZoffset (tz) value as the number of minutes (signed). Diese Anweisung gibt einen Zeitzonenoffset von 310 Minuten zurück:This statement returns a time zone offset of 310 minutes:

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

DATEPART rendert den TZoffset-Wert folgendermaßen:DATEPART renders the TZoffset value as follows:

  • Für datetimeoffset und datetime2 gibt TZoffset den Zeitoffset in Minuten an, wobei der Offset für datetime2 immer 0 Minuten beträgt.For datetimeoffset and datetime2, TZoffset returns the time offset in minutes, where the offset for datetime2 is always 0 minutes.
  • Für Datentypen, die implizit in datetimeoffset oder datetime2 konvertiert werden können, gibt DATEPART den Zeitoffset in Minuten an.For data types that can implicitly convert to datetimeoffset or datetime2, DATEPART returns the time offset in minutes. Eine Ausnahme stellen andere Datums- und Uhrzeitdatentypen dar.Exception: other date / time data types.
  • Parameter aller anderen Typen führen zu einem Fehler.Parameters of all other types result in an error.

date-Argument des Typs smalldatetimesmalldatetime date Argument

Für den date-Wert smalldatetime gibt DATEPART die Sekunden als 00 zurück.For a smalldatetime date value, DATEPART returns seconds as 00.

Zurückgeben des Standardwerts für ein datepart-Argument, das nicht in einem date-Argument enthalten istDefault Returned for a datepart That Is Not in a date Argument

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.If the date argument data type does not have the specified datepart, DATEPART will return the default for that datepart only when a literal is specified for date.

Beispielsweise wird bei Jahr-Monat-Tag für jeden date-Datentyp standardmäßig der Wert 1900-01-01 angegeben.For example, the default year-month-day for any date data type is 1900-01-01. 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.This statement has date part arguments for datepart, a time argument for date, and it returns 1900, 1, 1, 1, 2.

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.If date is specified as a variable or table column, and the data type for that variable or column does not have the specified datepart, DATEPART will return error 9810. In diesem Beispiel verfügt die Variable @t über den Datentyp time.In this example, variable @t has a time data type. Das Beispiel schlägt fehl, da das Datumsteil „year“ für den time-Datentyp ungültig ist:The example fails because the date part year is invalid for the time data type:

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

SekundenbruchteileFractional seconds

Diese Anweisungen veranschaulichen, dass DATEPART Sekundenbruchteile zurückgibt:These statements show that DATEPART returns fractional seconds:

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  

RemarksRemarks

DATEPART kann in den Klauseln SELECT , WHERE, HAVING, GROUP BY und ORDER BY verwendet werden.DATEPART can be used in the select list, WHERE, HAVING, GROUP BY, and ORDER BY clauses.

In SQL Server 2017SQL Server 2017 wandelt DATEPART Zeichenfolgenliterale implizit in den datetime2-Typ um.DATEPART implicitly casts string literals as a datetime2 type in SQL Server 2017SQL Server 2017. Daher unterstützt DATENAME das Format YDM nicht, wenn das Datum als Zeichenfolge übergeben wird.This means that DATENAME does not support the format YDM when the date is passed as a string. Sie müssen die Zeichenfolge explizit in den Typ datetime oder smalldatetime umwandeln, um das YDM-Format zu verwenden.You must explicitly cast the string to a datetime or smalldatetime type to use the YDM format.

BeispieleExamples

In diesem Beispiel wird das Basisjahr zurückgegeben.This example returns the base year. Das Basisjahr ist bei Datumsberechnungen nützlich.The base year helps with date calculations. Im Beispiel gibt eine Zahl das Datum an.In the example, a number specifies the date. Beachten Sie, dass SQL ServerSQL Server den Wert 0 als 1. Januar 1900 interpretiert.Notice that SQL ServerSQL Server interprets 0 as January 1, 1900.

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.This example returns the day part of the date 12/20/1974.

-- Uses AdventureWorks  

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

Im Folgenden finden Sie das Resultset.Here is the result set.

--------
20

In diesem Beispiel wird das Jahr des Datums (12/20/1974) zurückgegeben.This example returns the year part of the date 12/20/1974.

-- Uses AdventureWorks  

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

Im Folgenden finden Sie das Resultset.Here is the result set.

--------
1974

Siehe auchSee also

CAST und CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)