datetime2 (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Platform System (PDW) SQL Analytics Platform-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric Warehouse
Definiert ein Datum, das mit einer Uhrzeit kombiniert ist und auf dem 24-Stunden-Format basiert. datetime2 kann als eine Erweiterung des bestehenden datetime-Typs angesehen werden, der einen größeren Datumsbereich, eine größere Standardgenauigkeit bei Sekundenbruchteilen und eine optionale vom Benutzer angegebene Genauigkeit besitzt.
datetime2-Beschreibung
Eigenschaft | Wert |
---|---|
Syntax | datetime2 [ (Genauigkeit in Sekundenbruchteilen) ] |
Verwendung | DECLARE @MyDatetime2 datetime2(7) CREATE TABLE Table1 ( Column1 datetime2(7) ) |
Standardmäßiges Format der Zeichenfolgenliterale (wird zum Zweck der Clientkompatibilität verwendet) |
YYYY-MM-DD hh:mm:ss [.Sekundenbruchteile] Weitere Informationen finden Sie im nachfolgenden Abschnitt „Abwärtskompatibilität für Downlevelclients“. |
Datumsbereich | 0001-01-01 bis 9999-12-31 1. Januar 1 n. Chr. bis 31. Dezember 9999 n. Chr. |
Uhrzeitbereich | 00:00:00 bis 23:59:590,9999999 |
Zeitzonenoffsetbereich | Keine |
Elementbereiche | Bei YYYY handelt es sich um eine vierstellige Zahl im Bereich von 0001 bis 9999, die ein Jahr darstellt. Bei MM handelt es sich um eine zweistellige Zahl im Bereich von 01 bis 12, die im angegebenen Jahr einen Monat darstellt. Bei DD handelt es sich um eine zweistellige Zahl im Bereich von 01 bis 31, die im angegebenen Monat einen Tag darstellt. Bei hh handelt es sich um eine zweistellige Zahl im Bereich von 00 bis 23, die die Stunde darstellt. Bei mm handelt es sich um eine zweistellige Zahl im Bereich von 00 bis 59, die die Minute darstellt. Bei ss handelt es sich um eine zweistellige Zahl im Bereich von 00 bis 59, die die Sekunde darstellt. Bei n* handelt es sich um eine null- bis siebenstellige Zahl von 0 bis 9999999, die die Sekundenbruchteile darstellt. In Informatica werden die Sekundenbruchteile abgeschnitten, wenn n > 3. |
Zeichenlänge | Mindestens 19 Positionen (YYYY-MM-DD hh:mm:ss) bis maximal 27 Positionen (YYYY-MM-DD hh:mm:ss .0000000) |
Genauigkeit, Dezimalstellen | 0 bis 7 Stellen mit einer Genauigkeit von 100 ns. Die Standardgenauigkeit beträgt 7 Stellen. In Microsoft Fabric kann dies ein ganzzahliger Wert von 0 bis 6 sein. Einen Standardwert gibt es nicht. Die Genauigkeit muss in Microsoft Fabric angegeben werden. |
Speichergröße 1 | 6 Byte für Genauigkeiten unter 3. 7 Byte für Genauigkeiten von 3 und 4. Alle anderen Genauigkeiten erfordern 8 Byte.2 |
Genauigkeit | 100 Nanosekunden |
Standardwert | 1900-01-01 00:00:00 |
Kalender | Gregorianisch |
Benutzerdefinierte Genauigkeit in Sekundenbruchteilen | Ja |
Beachtung und Beibehaltung des Zeitzonenoffsets | Nein |
Beachtung der Sommerzeit | Nein |
1 Bereitgestellte Werte gelten für den nicht komprimierten Rowstore-Index. Bei der Verwendung der Datenkomprimierung oder von Columnstore-Indizes kann sich die Speichergröße der Genauigkeiten ändern. Außerdem kann sich die Speichergröße auf dem Datenträger von der im Arbeitsspeicher unterscheiden. So benötigen datetime2-Werte immer 8 Byte Arbeitsspeicher, wenn der Batchmodus verwendet wird.
2 Wenn ein datetime2-Wert in einen varbinary-Wert umgewandelt wird, wird dem varbinary-Wert ein zusätzliches Byte hinzugefügt, um die Genauigkeit zu speichern.
Metadaten von Datentypen finden Sie unter sys.systypes (Transact-SQL) oder TYPEPROPERTY (Transact-SQL). Für einige Datums- und Uhrzeitdatentypen sind die Genauigkeit und die Dezimalstellenanzahl variabel. Informationen zum Abrufen von Genauigkeit und Einteilung für eine Spalte finden Sie unter COLUMNPROPERTY (Transact-SQL), COL_LENGTH (Transact-SQL) oder sys.columns (Transact-SQL).
Unterstützte Formate der Zeichenfolgenliterale für datetime2
In den folgenden Tabellen werden die unterstützten ISO 8601- und ODBC-Formate für Zeichenfolgenliterale für datetime2 aufgelistet. Informationen zu alphabetischen, numerischen, nicht getrennten Formaten sowie zu Zeitformaten für die Datums- und Uhrzeitbestandteile von datetime2 finden Sie unter date (Transact-SQL) und time (Transact-SQL).
ISO 8601 | Beschreibungen |
---|---|
YYYY-MM-DDThh:mm:ss[.nnnnnnn] YYYY-MM-DDThh:mm:ss[.nnnnnnn] |
Dieses Format wird nicht von den SET LANGUAGE- und SET DATEFORMAT-Gebietsschemaeinstellungen für Sitzungen beeinflusst. Das T, die Doppelpunkte (:) und der Punkt (.) werden in das Zeichenfolgenliteral eingeschlossen, z.B. '2007-05-02T19:58:47.1234567'. |
ODBC | BESCHREIBUNG |
---|---|
{ ts 'yyyy-mm-dd hh:mm:ss[.Sekundenbruchteile]' } | ODBC-API-spezifisch: Für die Anzahl der Stellen rechts vom Dezimaltrennzeichen, die den Sekundenbruchteil darstellen, kann 0 bis 7 (100 Nanosekunden) angegeben werden. |
Kompatibilität mit ANSI und ISO 8601
Die Kompatibilität mit ANSI und ISO 8601 von date und time gilt auch für datetime2.
Abwärtskompatibilität für Downlevelclients
Einige Downlevelclients unterstützen nicht die Datentypen time, date, datetime2 und datetimeoffset. In der folgenden Tabelle wird die Typzuordnung zwischen einer Instanz höherer Ebene in SQL Server und Downlevelclients gezeigt.
SQL Server-Datentyp | Standardmäßiges Format des an Downlevelclients übergebenen Zeichenfolgenliterals | ODBC früherer Versionen | OLEDB früherer Versionen | JDBC früherer Versionen | SQLCLIENT früherer Versionen |
---|---|---|---|---|---|
time | hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR oder SQL_VARCHAR | DBTYPE_WSTR oder DBTYPE_STR | Java.sql.String | Zeichenfolge oder SqString |
date | JJJJ-MM-TT | SQL_WVARCHAR oder SQL_VARCHAR | DBTYPE_WSTR oder DBTYPE_STR | Java.sql.String | Zeichenfolge oder SqString |
datetime2 | YYYY-MM-DD hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR oder SQL_VARCHAR | DBTYPE_WSTR oder DBTYPE_STR | Java.sql.String | Zeichenfolge oder SqString |
datetimeoffset | YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR oder SQL_VARCHAR | DBTYPE_WSTR oder DBTYPE_STR | Java.sql.String | Zeichenfolge oder SqString |
Konvertieren von Datums- und Uhrzeitdaten
Beim Konvertieren in date- und time-Datentypen lehnt SQL Server alle Werte ab, die nicht als Datum oder Uhrzeit erkannt werden. Informationen zur Verwendung der Funktionen CAST und CONVERT mit Datums- und Uhrzeitdaten finden Sie unter CAST und CONVERT (Transact-SQL).
Konvertieren anderer Datums- und Uhrzeittypen in datetime2-Datentyp
Der folgende Abschnitt veranschaulicht die Abläufe bei der Konvertierung von anderen Datums- und Uhrzeitdatentypen in den Datentyp datetime2.
Beim Konvertieren in date werden das Jahr, der Monat und der Tag kopiert. Die Zeitkomponente wird auf 00:00:00.0000000 festgelegt. Der folgende Code zeigt die Ergebnisse der Konvertierung eines date
-Werts in einen datetime2
-Wert.
DECLARE @date date = '12-21-16';
DECLARE @datetime2 datetime2 = @date;
SELECT @datetime2 AS '@datetime2', @date AS '@date';
--Result
--@datetime2 @date
----------------------------- ----------
--2016-12-21 00:00:00.0000000 2016-12-21
Beim Konvertieren von time(n) wird die Zeitkomponente kopiert, und die Datumskomponente wird auf „1900-01-01“ festgelegt. Das folgende Beispiel zeigt die Ergebnisse der Konvertierung eines time(7)
-Werts in einen datetime2
-Wert.
DECLARE @time time(7) = '12:10:16.1234567';
DECLARE @datetime2 datetime2 = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
--Result
--@datetime2 @time
----------------------------- ----------------
--1900-01-01 12:10:16.1234567 12:10:16.1234567
Wenn die Konvertierung von samlldatetime erfolgt, werden die Stunden und Minuten kopiert. Die Sekunden und die Sekundenbruchteile werden auf 0 festgelegt. Der folgende Code zeigt die Ergebnisse der Konvertierung eines smalldatetime
-Werts in einen datetime2
-Wert.
DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';
DECLARE @datetime2 datetime2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2', @smalldatetime AS '@smalldatetime';
--Result
--@datetime2 @smalldatetime
----------------------------- -----------------------
--2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
Wenn die Konvertierung von datetimeoffset(n) erfolgt, werden die Datums- und Uhrzeitkomponenten kopiert. Die Zeitzone wird abgeschnitten. Das folgende Beispiel zeigt die Ergebnisse der Konvertierung eines datetimeoffset(7)
-Werts in einen datetime2
-Wert.
DECLARE @datetimeoffset datetimeoffset(7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 datetime2 = @datetimeoffset;
SELECT @datetime2 AS '@datetime2', @datetimeoffset AS '@datetimeoffset';
--Result
--@datetime2 @datetimeoffset
----------------------------- ----------------------------------
--2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00
Wenn die Konvertierung von datetime erfolgt, werden Datum und Uhrzeit kopiert. Die Genauigkeit der Sekundenbruchteile wird auf 7 Dezimalstellen erweitert. Das folgende Beispiel zeigt die Ergebnisse der Konvertierung eines datetime
-Werts in einen datetime2
-Wert.
DECLARE @datetime datetime = '2016-10-23 12:45:37.333';
DECLARE @datetime2 datetime2 = @datetime;
SELECT @datetime2 AS '@datetime2', @datetime AS '@datetime';
--Result
--@datetime2 @datetime
------------------------- ---------------------------
--2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
Hinweis
Unter dem Datenbankkompatibilitätsgrad 130 ergibt sich bei einer impliziten Konvertierung aus dem Datentyp „datetime“ in den Datentyp „datetime2“ eine verbesserte Genauigkeit, indem die Bruchteile von Millisekunden berücksichtigt werden, wodurch sich unterschiedliche konvertierte Werte ergeben, wie es im Beispiel oben zu sehen ist. Verwenden Sie explizite Umwandlung in den Datentyp „datetime2“, wenn ein Vergleich so gestaltet ist, dass zwischen den Datentypen „datetime“ und „datetime2“ verglichen wird. Weitere Informationen finden Sie im folgenden Microsoft-Support-Artikel.
Konvertieren von Zeichenfolgenliteralen in datetime2
Konvertierungen von Zeichenfolgenliteralen in Datums- und Zeitwerte sind erlaubt, wenn alle Teile der Zeichenfolge in gültigen Formaten vorliegen. Andernfalls wird ein Laufzeitfehler ausgelöst. Wird bei impliziten oder expliziten Konvertierungen von Datums- und Zeitwerten in Zeichenfolgenliterale kein Stil angegeben, wird das Standardformat der aktuellen Sitzung verwendet. In der folgenden Tabelle werden die Regeln zum Konvertieren eines Zeichenfolgenliterals in den datetime2-Datentyp dargestellt.
Eingabezeichenfolgenliteral | datetime2(n) |
---|---|
ODBC DATE | Dem datetime-Datentyp werden ODBC-Zeichenfolgenliterale zugeordnet. Jede Zuweisungsoperation von ODBC DATETIME-Literalen zu datetime2-Typen bewirkt eine in den Konvertierungsregeln definierte implizite Konvertierung zwischen datetime und diesen Typen. |
ODBC TIME | Siehe vorherige ODBC DATE-Regel. |
ODBC DATETIME | Siehe vorherige ODBC DATE-Regel. |
Nur DATE | Der TIME-Teil wird standardmäßig auf 00:00:00 festgelegt. |
Nur TIME | Der DATE-Teil wird standardmäßig auf 1900-1-1 festgelegt. |
Nur TIMEZONE | Standardwerte werden festgelegt. |
DATE + TIME | Trivial |
DATE + TIMEZONE | Nicht zulässig. |
TIME + TIMEZONE | Der DATE-Teil wird standardmäßig auf 1900-1-1 festgelegt. TIMEZONE-Eingabe wird ignoriert. |
DATE + TIME + TIMEZONE | Die lokale DATETIME wird verwendet. |
Beispiele
Im folgenden Beispiel werden die Ergebnisse der Umwandlung von einer Zeichenfolge in alle date- und time-Datentypen verglichen.
SELECT
CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'
,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS
'smalldatetime'
,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS
'datetime2'
,CAST('2007-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 | 2007-05-08 |
smalldatetime | 2007-05-08 12:35:00 |
datetime | 2007-05-08 12:35:29.123 |
datetime2 | 2007-05-08 12:35:29.1234567 |
datetimeoffset | 2007-05-08 12:35:29.1234567 +12:15 |