Teilen über


datetime (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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, , .003oder .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_englishvorhanden 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 Sie N''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ürzung2050 (Standardeinstellung) lautet, 25 wird sie als 2025 interpretiert und 50 als interpretiert 1950. 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 TDoppelpunkte () 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 Datum
    • t = nur Zeit
    • ts = 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 ist das Resultset.

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 ist das Resultset.

@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 ist das Resultset.

@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 ist das Resultset.

@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 ist das Resultset.

@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 ist das Resultset.

@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 ist das Resultset.

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