Freigeben über


datetime2 (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL-Analyseendpunkt in Microsoft Fabric Warehouse in Microsoft Fabric SQL-Datenbank in Microsoft Fabric

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) ]
Verbrauch 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[.nnnnnnn]

Weitere Informationen finden Sie weiter unten in diesem Artikel unter Abwärtskompatibilität für Clients auf down-level.for more information, see Backward compatibility for down-level clients later in this article.
Datumsbereich 0001-01-01 bis 9999-12-31

1. Januar 1 n. Chr. bis 31. Dezember 9999
Uhrzeitbereich 00:00:00 bis 23:59:59.9999999
Zeitzonenoffsetbereich Keine
Elementbereiche yyyy ist eine vierstellige Zahl, von bis 0001 9999zu , die ein Jahr darstellt.

MM ist eine zweistellige Zahl, von 01 bis zu 12, die einen Monat im angegebenen Jahr darstellt.

dd ist eine zweistellige Zahl, von 01 bis zu 31 je nach Monat, die einen Tag des angegebenen Monats darstellt.

HH ist eine zweistellige Zahl, die von 00 bis zu 23, die die Stunde darstellt.

mm ist eine zweistellige Zahl, von 00 bis zu 59, die die Minute darstellt.

ss ist eine zweistellige Zahl, von 00 bis zu 59, die die zweite darstellt.

n* ist eine Null- bis siebenstellige Zahl von 0 bis zu 9999999, die die Bruch sekunden darstellt. In Informatica werden die Bruchsekunden abgeschnitten, wenn n kleiner als 3ist.
Zeichenlänge Mindestens 19 Positionen (yyyy-MM-dd HH:mm:ss) bis 27 (yyyy-MM-dd HH:mm:ss.0000000)
Genauigkeit, Dezimalstellen 0 bis 7 Ziffern mit einer Genauigkeit von 100 Nanosekunden (100 ns). Die Standardgenauigkeit beträgt 7 Stellen.

In Microsoft Fabric Data Warehouse kann diese Genauigkeit eine ganze Zahl von 0 bis 6 sein, ohne Standard. Genauigkeit muss in Microsoft Fabric Data Warehouse angegeben werden.
Speichergröße 1 6 Byte für Genauigkeiten unter 3.
7 Byte für Genauigkeiten von 3 und 4.

Für alle anderen Genauigkeiten sind 8 Byte erforderlich. 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. Die Verwendung der Datenkomprimierung oder des Spaltenspeichers kann die Speichergröße für jede Genauigkeit ändern. Darüber hinaus kann sich die Speichergröße auf dem Datenträger und 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 umgerechnet wird, wird dem Varbinarywert ein zusätzliches Byte hinzugefügt, um die Genauigkeit zu speichern.

Informationen zu Datentypmetadaten finden Sie unter "sys.systypes " oder "TYPEPROPERTY". Für einige Datums- und Uhrzeitdatentypen sind die Genauigkeit und die Dezimalstellenanzahl variabel. Informationen zum Abrufen der Genauigkeit und Skalierung für eine Spalte finden Sie unter COLUMNPROPERTY, COL_LENGTH oder sys.columns.

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 analysierten und Zeitformaten für die Datums- und Uhrzeitteile von Datetime2 finden Sie unter Datum und Uhrzeit.

ISO 8601 Beschreibungen
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] Dieses Format ist von den Gebietsschemaeinstellungen und SET DATEFORMAT den SET LANGUAGE Einstellungen für sitzungsbedingte Einstellungen nicht betroffen. Die TDoppelpunkte (:) und der Punkt (.) sind beispielsweise 2024-05-02T19:58:47.1234567im Zeichenfolgenliteral enthalten.
ODBC Beschreibung
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } 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 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- und CONVERT-Funktionen mit Datums- und Uhrzeitdaten finden Sie unter CAST und CONVERT

Konvertieren anderer Datums- und Uhrzeittypen in den Datentyp "datetime2"

Der folgende Abschnitt veranschaulicht die Abläufe bei der Konvertierung von anderen Datums- und Uhrzeitdatentypen in den Datentyp datetime2.

Beim Konvertieren von 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 AS DATE = '12-21-16';

DECLARE @datetime2 AS DATETIME2 = @date;

SELECT @datetime2 AS '@datetime2',
       @date AS '@date';

Hier sehen Sie das Ergebnis.

@datetime2                  @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21

Wenn die Konvertierung von "time(n)" erfolgt, wird die Zeitkomponente kopiert, und die Datumskomponente wird auf 1900-01-01". Das folgende Beispiel zeigt die Ergebnisse der Konvertierung eines Time(7) -Werts in einen Datetime2-Wert .

DECLARE @time AS TIME (7) = '12:10:16.1234567';

DECLARE @datetime2 AS DATETIME2 = @time;

SELECT @datetime2 AS '@datetime2',
       @time AS '@time';

Hier sehen Sie das Ergebnis.

@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 AS SMALLDATETIME = '12-01-16 12:32';

DECLARE @datetime2 AS DATETIME2 = @smalldatetime;

SELECT @datetime2 AS '@datetime2',
       @smalldatetime AS '@smalldatetime';

Hier sehen Sie das Ergebnis.

@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 AS DATETIMEOFFSET (7) = '2016-10-23 12:45:37.1234567 +10:0';

DECLARE @datetime2 AS DATETIME2 = @datetimeoffset;

SELECT @datetime2 AS '@datetime2',
       @datetimeoffset AS '@datetimeoffset';

Hier sehen Sie das Ergebnis.

@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 AS DATETIME = '2016-10-23 12:45:37.333';

DECLARE @datetime2 AS DATETIME2 = @datetime;

SELECT @datetime2 AS '@datetime2',
       @datetime AS '@datetime';

Hier sehen Sie das Ergebnis.

@datetime2                  @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333

Explizit in "datetime2" umwandeln, wenn "datetime" verwendet wird

Unter datenbankkompatibilitätsebene 130 und höher zeigen implizite Konvertierungen von datetime in datetime2-Datentypen eine verbesserte Genauigkeit, indem die Bruch millisekunden, was zu unterschiedlichen konvertierten Werten führt, wie im vorherigen Beispiel gezeigt. Verwenden Sie die explizite Umwandlung in den Datentyp "datetime2 ", wenn ein gemischtes Vergleichsszenario zwischen Datetime - und Datetime2-Datentypen vorhanden ist. Weitere Informationen finden Sie unter SQL Server und Azure SQL-Datenbank Verbesserungen bei der Behandlung einiger Datentypen und ungewöhnlicher Vorgänge.

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. Implizite Konvertierungen oder explizite Konvertierungen, die keine Formatvorlage angeben, von Datums- und Uhrzeittypen in Zeichenfolgenliterale befinden sich im Standardformat der aktuellen Sitzung. 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. Jeder Zuordnungsvorgang von ODBC DATETIME Literalen in Datetime2-Typen verursacht eine implizite Konvertierung zwischen Datetime und diesem Typ, wie durch die Konvertierungsregeln definiert.
ODBC TIME Siehe vorherige ODBC DATE Regel.
ODBC DATETIME Siehe vorherige ODBC DATE Regel.
Nur DATE Der Standardwert für 00:00:00das TIME Teil ist .
Nur TIME Der Standardwert für 1900-01-01das DATE Teil ist .
Nur TIMEZONE Standardwerte werden festgelegt.
DATE + TIME Trivial.
DATE + TIMEZONE Nicht erlaubt.
TIME + TIMEZONE Der DATE Standardwert ist 1900-1-1. TIMEZONE Eingaben werden 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 sehen Sie das Ergebnis.

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