datetime (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Definiert ein Datum, das mit einer Uhrzeit mit Sekundenbruchteilen kombiniert ist und auf dem 24-Stunden-Format basiert.
Vermeiden Sie die Verwendung von Datum und Uhrzeit für neue Arbeit. Verwenden Sie stattdessen die Datentypen "Time", "date", "datetime2" und "datetimeoffset". Diese Typen richten sich an den SQL Standard und sind portierbarer. Durch time, datetime2 and datetimeoffset wird eine höhere Genauigkeit in Sekunden unterstützt. datetimeoffset unterstützt Zeitzonen für global bereitgestellte Anwendungen.
BESCHREIBUNG
Eigenschaft | Wert |
---|---|
Syntax | DATETIME |
Verwendung | DECLARE @MyDatetime DATETIME; CREATE TABLE Table1 (Column1 DATETIME); |
Standardformate für Zeichenfolgenliterale (wird für client down-level verwendet) | Nicht zutreffend |
Datumsbereich | 1753-01-01 (1. Januar 1753) bis 9999-12-31 (31. Dezember 9999) |
Zeitbereich | 00:00:00 bis 23:59:59.997 |
Zeitzonenoffsetbereich | Keine |
Elementbereiche | yyyy beträgt vier Ziffern von 1753 bis zu 9999 denen ein Jahr darstellt.MM ist zwei Ziffern, von 01 bis zu 12 , die einen Monat im angegebenen Jahr darstellen.dd ist zwei Ziffern, von 01 bis zu 31 je nach Monat, die einen Tag des angegebenen Monats darstellen.HH ist zwei Ziffern, von 00 bis zu 23 , die die Stunde darstellen.mm ist zwei Ziffern, von 00 bis zu 59 , die die Minute darstellen.ss ist zwei Ziffern, von 00 bis zu 59 , die die zweite darstellen.n* ist null bis drei Ziffern, von 0 bis zu 999 , die die Bruch sekunden darstellen. |
Zeichenlänge | Mindestens 19 Positionen bis maximal 23 Positionen |
Speichergröße | 8 Bytes |
Genauigkeit | Gerundet auf Inkremente von .000 , , .003 oder .007 Sekunden |
Standardwert | 1900-01-01 00:00:00 |
Calendar | Gregorianisch (einschließlich des gesamten Bereichs von Jahren) |
Benutzerdefinierte Sekundenbruchpräzision | Nein |
Berücksichtigung und Erhaltung des Zeitzonenoffsets | Nein |
Sommerzeit fähig | Nein |
Unterstützte Formate der Zeichenfolgenliterale für datetime
In den folgenden Tabellen werden die unterstützten Formate für Zeichenfolgenliterale für datetime aufgelistet. Mit Ausnahme von ODBC befinden sich Zeichenfolgenliterale in einfachen Anführungszeichen ('
), z. B'string_literaL'
. . Wenn die Umgebung nicht us_english
vorhanden ist, sollten die Zeichenfolgenliterale im Unicode-Format vorliegen N'string_literaL'
.
Numerisches Format
Sie können Datumsdaten mit der numerischen Angabe eines Monats angeben. Stellt beispielsweise 5/20/97
den zwanzigsten Tag des Mais 1997 dar. Wenn Sie ein numerisches Datumsformat verwenden, geben Sie den Monat, den Tag und das Jahr in einer Zeichenfolge an, die Schrägstriche (), Bindestriche (/
-
) oder Punkte (.
) als Trennzeichen verwendet. Diese Zeichenfolge muss das folgende Format haben:
<number separator number separator number [time] [time]>
Wenn die Sprache auf us_english
"" festgelegt ist, lautet mdy
die Standardreihenfolge für das Datum (Monat, Tag, Jahr). Sie können das Datumsformat mithilfe der SET DATEFORMAT-Anweisung ändern.
Die Einstellung bestimmt SET DATEFORMAT
, wie Datumswerte interpretiert werden. Wenn die Reihenfolge nicht mit der Einstellung übereinstimmt, werden die Werte nicht als Datumsangaben interpretiert. Veraltete Datumsangaben werden möglicherweise als außerhalb des Bereichs oder mit falschen Werten interpretiert. Kann beispielsweise 12/10/08
je nach DATEFORMAT
Einstellung als eines von sechs Datumsangaben interpretiert werden. Eine vierstellige Jahresangabe wird als Jahr interpretiert.
Datumsformat | Auftrag |
---|---|
[0]4/15/[19]96 |
mdy |
[0]4-15-[19]96 |
mdy |
[0]4.15.[19]96 |
mdy |
[0]4/[19]96/15 |
myd |
15/[0]4/[19]96 |
dmy |
15/[19]96/[0]4 |
dym |
[19]96/15/[0]4 |
ydm |
[19]96/[0]4/15 |
ymd |
Zeitformat |
---|
14:30 |
14:30[:20:997] |
14:30[:20.9] |
4am |
4 PM |
Alphabetisches Format
Sie können Datumsdaten mit einem Monat angeben, der mit dem vollständigen Monatsnamen angegeben wird. Beispielsweise April
, oder die Monatskürzel von Apr
, die in der aktuellen Sprache angegeben ist. Kommas sind optional, und die Großschreibung wird ignoriert.
Es folgen einige Richtlinien für die Verwendung von alphabetischen Datumsformaten:
Setzen Sie die Datums- und Uhrzeitdaten in einfache Anführungszeichen (
'
). Verwenden SieN''
für andere Sprachen als Englisch .In Klammern eingeschlossene Zeichen sind optional.
Wenn Sie nur die letzten beiden Ziffern des Jahres angeben, sind die Werte kleiner als die letzten beiden Ziffern des Werts der zweistelligen Jahresabkürzungskonfigurationsoption im selben Jahrhundert wie das Stichjahr. Werte, die größer als oder gleich dem Wert dieser Option sind, liegen in dem Jahrhundert, das dem Umstellungsjahr vorangeht. Wenn z. B . die zweistellige Jahreskürzung
2050
(Standardeinstellung) lautet,25
wird sie als2025
interpretiert und50
als interpretiert1950
. Um Mehrdeutigkeiten zu vermeiden, sollten Sie vierstellige Jahreszahlen verwenden.Wenn der Tag fehlt, wird der erste Tag des Monats angegeben.
Die
SET DATEFORMAT
Sitzungseinstellung wird nicht angewendet, wenn Sie den Monat in alphabetischer Form angeben.
Alphabetisch |
---|
Apr[il] [15][,] 1996 |
Apr[il] 15[,] [19]96 |
Apr[il] 1996 [15] |
[15] Apr[il][,] 1996 |
15 Apr[il][,][19]96 |
15 [19]96 apr[il] |
[15] 1996 apr[il] |
1996 APR[IL] [15] |
1996 [15] APR[IL] |
Angabe im ISO 8601-Format.
Um das ISO 8601-Format zu verwenden, müssen Sie jedes Element im Format angeben, einschließlich der T
Doppelpunkte () und des Punkts (:
.
), die im Format angezeigt werden.
Die eckigen Klammern zeigen, dass der Teil, der die Sekunden angibt, optional ist. Die Uhrzeit wird im 24-Stunden-Format angegeben. Der T
Wert gibt den Anfang des Zeitteils des Datetime-Werts an.
Der Vorteil bei der Verwendung des ISO 8601-Formats besteht darin, dass es sich um einen internationalen Standard mit eindeutiger Spezifikation handelt. Außerdem ist dieses Format von der SET DATEFORMAT
Einstellung "SPRACHE FESTLEGEN" nicht betroffen.
Beispiele:
2004-05-23T14:25:10
2004-05-23T14:25:10.487
ISO 8601 |
---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
Nicht analysiertes Format
Dieses Format ähnelt dem ISO 8601-Format, außer es enthält keine Datumstrennzeichen.
Unstrukturiert |
---|
yyyyMMdd HH:mm:ss[.mmm] |
ODBC-Format
Die ODBC-API definiert Escapesequenzen zur Darstellung von Datums- und Uhrzeitwerten, die in der ODBC-Terminologie als Zeitstempel-Daten bezeichnet werden. Dieses ODBC-Zeitstempel-Format wird auch von der OLE DB-Sprachendefinition (DBGUID-SQL) unterstützt, die vom OLE DB-Anbieter Microsoft für SQL Server unterstützt wird. Anwendungen, die die ADO-, OLE DB- und ODBC-basierten APIs verwenden, können dieses ODBC-Zeitstempel-Format zur Darstellung von Datums- und Zeitangaben verwenden.
ODBC-Zeitstempel-Escapesequenzen weisen das Format auf: : { <literal_type> '<constant_value>' }
<literal_type>
Gibt den Typ der Escapesequenz an. Zeitstempel weisen drei<literal_type>
Bezeichner auf:d
= Nur Datumt
= nur Zeitts
= Zeitstempel (Uhrzeit + Datum)
<constant_value>
ist der Wert der Escapesequenz.<constant_value>
müssen die folgenden Formate für jedes<literal_type>
formatieren:d
:yyyy-MM-dd
t
:hh:mm:ss[.fff]
ts
:yyyy-MM-dd HH:mm:ss[.fff]
ODBC |
---|
{ ts '1998-05-02 01:23:56.123' } |
{ d '1990-10-02' } |
{ t '13:33:41' } |
Runden der Genauigkeit in Sekundenbruchteilen von datetime
Datetime-Werte werden auf Inkremente von .000
, oder .003
.007
Sekunden gerundet, wie im folgenden Beispiel gezeigt.
SELECT '01/01/2024 23:59:59.999' AS [User-specified value],
CAST('01/01/2024 23:59:59.999' AS DATETIME) AS [System stored value]
UNION SELECT '01/01/2024 23:59:59.998', CAST('01/01/2024 23:59:59.998' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.997', CAST('01/01/2024 23:59:59.997' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.996', CAST('01/01/2024 23:59:59.996' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.995', CAST('01/01/2024 23:59:59.995' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.994', CAST('01/01/2024 23:59:59.994' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.993', CAST('01/01/2024 23:59:59.993' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.992', CAST('01/01/2024 23:59:59.992' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.991', CAST('01/01/2024 23:59:59.991' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.990', CAST('01/01/2024 23:59:59.990' AS DATETIME);
Hier sehen Sie das Ergebnis.
Vom Benutzer angegebener Wert | Gespeicherter Systemwert |
---|---|
01/01/2024 23:59:59.999 |
2024-01-02 00:00:00.000 |
01/01/2024 23:59:59.998 01/01/2024 23:59:59.997 01/01/2024 23:59:59.996 01/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.994 01/01/2024 23:59:59.993 01/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.991 01/01/2024 23:59:59.990 |
2024-01-01 23:59:59.990 |
Kompatibilität mit ANSI und ISO 8601
datetime ist nicht konform mit ANSI oder ISO 8601.
Konvertieren von date- und time-Daten
Wenn Sie in Datentypen für Datum und Uhrzeit konvertieren, lehnt die Datenbank-Engine alle Werte ab, die nicht als Datums- oder Uhrzeitwerte erkannt werden können. Informationen zur Verwendung der CAST
Daten und CONVERT
Funktionen mit Datums- und Uhrzeitdaten finden Sie unter CAST und CONVERT.
Konvertieren anderer Datums- und Uhrzeittypen in den Datentyp "datetime"
Der folgende Abschnitt veranschaulicht die Abläufe bei der Konvertierung des datetime-Datentyps in andere Datums- und Uhrzeitdatentypen.
Beim Konvertieren von date werden das Jahr, der Monat und der Tag kopiert. Die Zeitkomponente ist auf 00:00:00.000
. Der folgende Code zeigt die Ergebnisse der Konvertierung eines DATE
-Werts in einen DATETIME
-Wert.
DECLARE @date DATE = '12-21-16';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Hier sehen Sie das Ergebnis.
@datetime @date
------------------------ -----------
2016-12-21 00:00:00.000 2016-12-21
Im vorherigen Beispiel wird ein bereichsspezifisches Datumsformat (MM-DD-YY
) verwendet.
DECLARE @date DATE = '12-21-16';
Sie sollten das Beispiel so aktualisieren, dass es mit dem Format für Ihre Region übereinstimmt.
Sie können das Beispiel auch mit dem ISO 8601-kompatiblen Datumsformat (yyyy-MM-dd
) abschließen. Zum Beispiel:
DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Wenn die Konvertierung von "time(n)" erfolgt, wird die Zeitkomponente kopiert, und die Datumskomponente wird auf 1900-01-01
". Wenn die Bruchgenauigkeit des Zeitwerts (n) größer als drei Ziffern ist, wird der Wert abgeschnitten, damit er passt. Das folgende Beispiel zeigt die Ergebnisse der Konvertierung eines TIME(4)
-Werts in einen DATETIME
-Wert.
DECLARE @time TIME(4) = '12:10:05.1237';
DECLARE @datetime DATETIME = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
Hier sehen Sie das Ergebnis.
@datetime @time
------------------------ --------------
1900-01-01 12:10:05.123 12:10:05.1237
Wenn die Konvertierung von samlldatetime erfolgt, werden die Stunden und Minuten kopiert. Die Sekunden und Bruch sekunden werden auf 0
. Der folgende Code zeigt die Ergebnisse der Konvertierung eines SMALLDATETIME
-Werts in einen DATETIME
-Wert.
DECLARE @smalldatetime SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime DATETIME = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
Hier sehen Sie das Ergebnis.
@datetime @smalldatetime
------------------------ --------------------
2016-12-01 12:32:00.000 2016-12-01 12:32:00
Wenn die Konvertierung von datetimeoffset(n) stammt, werden die Datums- und Uhrzeitkomponenten kopiert. Die Zeitzone wird abgeschnitten. Wenn die Bruchgenauigkeit des Datetimeoffset(n) -Werts größer als drei Stellen ist, wird der Wert abgeschnitten. Das folgende Beispiel zeigt die Ergebnisse der Konvertierung eines DATETIMEOFFSET(4)
-Werts in einen DATETIME
-Wert.
DECLARE @datetimeoffset DATETIMEOFFSET(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime DATETIME = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
Hier sehen Sie das Ergebnis.
@datetime @datetimeoffset
------------------------ -------------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
Wenn die Konvertierung von datetime2(n) stammt, werden Datum und Uhrzeit kopiert. Wenn die Bruchgenauigkeit des Datetime2(n) -Werts größer als drei Ziffern ist, wird der Wert abgeschnitten. Das folgende Beispiel zeigt die Ergebnisse der Konvertierung eines DATETIME2(4)
-Werts in einen DATETIME
-Wert.
DECLARE @datetime2 DATETIME2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime DATETIME = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
Hier sehen Sie das Ergebnis.
@datetime @datetime2
------------------------ -------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
Beispiele
Im folgenden Beispiel werden die Ergebnisse der Umwandlung von einer Zeichenfolge in alle date- und time-Datentypen verglichen.
SELECT CAST('2024-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';
Hier sehen Sie das Ergebnis.
Datentyp | Output |
---|---|
time |
12:35:29.1234567 |
date |
2024-05-08 |
smalldatetime |
2024-05-08 12:35:00 |
datetime |
2024-05-08 12:35:29.123 |
datetime2 |
2024-05-08 12:35:29.1234567 |
datetimeoffset |
2024-05-08 12:35:29.1234567 +12:15 |