datetime2 (Transact-SQL)

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.

Beschreibung von datetime2

Eigenschaft

Wert

Syntax

datetime2 [ (fractional seconds precision) ]

Verwendung

DECLARE @MyDatetime2 datetime2(7)

CREATE TABLE Table1 ( Column1 datetime2(7) )

Standardmäßiges Format der Zeichenfolgenliterale

(wird für Downlevelclients 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.

Zeitbereich

00:00:00 bis 23:59:59.9999999

Zeitzonenoffsetbereich

Kein

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.

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.

Speichergröße

6 Byte für Genauigkeiten unter 3; 7 Byte für Genauigkeiten von 3 und 4. Alle anderen Genauigkeiten erfordern 8 Bytes.

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

Informationen zu Metadaten in Bezug auf den Datentyp finden Sie unter sys.systypes (Transact-SQL) oder unter TYPEPROPERTY (Transact-SQL). Für einige Datums- und Uhrzeitdatentypen sind die Genauigkeit und die Dezimalstellenanzahl variabel. Informationen zum Abrufen der Genauigkeit und der Dezimalstellenanzahl 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 und unstrukturierten Formaten sowie zu Zeitformaten für die Datums- und Uhrzeitteile von datetime2 finden Sie unter date (Transact-SQL) und unter 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.

  • In SQL Server 2012 wird das Literal intern dem neuen time-Typ zugeordnet, wenn der Kompatibilitätsgrad auf 10 festgelegt ist.

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 Clients früherer Versionen bieten keine Unterstützung der 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 2012-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 SqlString

date

YYYY-MM-DD

SQL_WVARCHAR oder SQL_VARCHAR

DBTYPE_WSTR oder DBTYPE_STR

Java.sql.String

Zeichenfolge oder SqlString

datetime2

YYYY-MM-DD hh:mm:ss[. nnnnnnn]

SQL_WVARCHAR oder SQL_VARCHAR

DBTYPE_WSTR oder DBTYPE_STR

Java.sql.String

Zeichenfolge oder SqlString

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 Zeitdaten

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 CAST-Funktion und der CONVERT-Funktion mit Datums- und Uhrzeitdaten finden Sie unter CAST und CONVERT (Transact-SQL).

Konvertieren des datetime2-Datentyps in andere Datums- und Uhrzeittypen

Die folgende Tabelle veranschaulicht die Abläufe bei der Konvertierung des datetime2-Datentyps in andere Datums- und Uhrzeitdatentypen.

Zieldatentyp der Konvertierung

Konvertierungsinformationen

date

Jahr, Monat und Tag werden kopiert.

Der folgende Code zeigt die Ergebnisse der Konvertierung eines datetime2(4)-Werts in einen date-Wert.

DECLARE @datetime2 datetime2(4) = '12-10-25 12:32:10.1234';
DECLARE @date date = @datetime2;
SELECT @datetime2 AS '@datetime2', @date AS 'date';
--Result
--@datetime2               date
-------------------------- ----------
--2025-12-10 12:32:10.1234 2025-12-10
--
--(1 row(s) affected)

time(n)

Die Stunden, Minuten, Sekunden und Sekundenbruchteile werden kopiert, wenn die Dezimalstellen übereinstimmen, und aufgerundet, wenn die Dezimalstellen abweichen.

Der folgende Code zeigt die Ergebnisse der Konvertierung eines datetime2(4)-Werts in einen time(3)-Wert.

DECLARE @datetime2 datetime2(4) = '12-10-25 12:32:10.1237';
DECLARE @time time(3) = @datetime2;
SELECT @datetime2 AS '@datetime2', @time AS 'time(3)';
--Result
--@datetime2                time(3) 
-------------------------- ------------
--2025-12-10 12:32:10.1234 12:32:10.124
--
--(1 row(s) affected)

datetime

Datums- und Zeitwerte werden kopiert. Wenn die Genauigkeit des datetime(n)-Werts um mehr als drei Sekundenbruchteile abweicht, wird der Wert gekürzt.

Der folgende Code zeigt die Ergebnisse der Konvertierung eines datetime2-Werts in einen datetime-Wert.

DECLARE @datetime2 datetime2 = '12-10-25 12:32:10.1234567'
DECLARE @datetime datetime = @datetime2;
SELECT @datetime2 AS '@datetime2', @datetime AS '@datetime';
--Result
--@datetime2                  @datetime
----------------------------- -----------------------
@datetime2             @datetime
---------------------- -----------------------
2025-12-10 12:32:10.12 2025-12-10 12:32:10.123
--
--(1 row(s) affected)

smalldatetime

Das Datum und die Stunden werden kopiert. Die Minuten werden entsprechend den Sekunden aufgerundet, und die Sekunden werden auf 0 festgelegt.

Der folgende Code zeigt die Ergebnisse der Konvertierung eines datetime2-Werts in einen smalldatetime-Wert.

DECLARE @datetime2 datetime2 = '12-10-25 12:32:30.9234567';
DECLARE @smalldatetime smalldatetime = @datetime2;
SELECT @datetime2 AS '@datetime2', @smalldatetime AS '@smalldatetime';
--Result
@datetime2             @smalldatetime
---------------------- -----------------------
2025-12-10 12:32:30.92 2025-12-10 12:33:00
(1 row(s) affected)

datetimeoffset(n)

Der datetime2(n)-Wert wird auf den datetimeoffset(n)-Wert kopiert. Der Zeitzonenoffset wird auf +00:0 festgelegt. Wenn die Genauigkeit des datetime2(n)-Werts größer ist als die Genauigkeit des datetimeoffset(n)-Werts, wird der Wert aufgerundet.

Der folgende Code zeigt die Ergebnisse der Konvertierung eines datetime2(5)-Werts in einen datetimeoffset(3)-Wert.

D DECLARE @datetime2 datetime2(3) = '12-10-25 12:32:10.12999';
DECLARE @datetimeoffset datetimeoffset(2) = @datetime2;
SELECT @datetime2 AS '@datetime2', @datetimeoffset AS '@datetimeoffset(2)';
--Result
--@datetime2              @datetimeoffset(2)
------------------------- -----------------------------
2025-12-10 12:32:10.13           2025-12-10 12:32:10.13 +00:00
--
--(1 row(s) affected)

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 implizite Konvertierung zwischen datetime und diesen Typen, wie in den Konvertierungsregeln definiert.

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-Datentypen 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';

Dies ist das Resultset.

Datentyp

Ausgabe

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

Siehe auch

Verweis

CAST und CONVERT (Transact-SQL)