date (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 in SQL Server. Der Datum-Datentyp wurde in SQL Server 2008 (10.0.x) eingeführt.
Beschreibung von „date“
Eigenschaft | Wert |
---|---|
Syntax | DATE |
Verbrauch | DECLARE @MyDate DATE CREATE TABLE Table1 (Column1 DATE) |
Standardmäßiges Format der Zeichenfolgenliterale (wird zum Zweck der Clientkompatibilität verwendet) |
yyyy-MM-dd Weitere Informationen finden Sie im Abschnitt Abwärtskompatibilität für Downlevelclient. |
Bereich | 0001-01-01 durch 9999-12-31 (1582-10-15 bis 9999-12-31 für Informatica)1\. Januar, 1 CE (Common Era) bis 31. Dezember, 9999 CE (15. Oktober, 1582 CE bis 31. Dezember, 9999 CE für Informatica) |
Elementbereiche | Bei yyyy handelt es sich um vier Ziffern von 0001 bis 9999 , die ein Jahr darstellen. Informatica schränkt yyyy auf den Bereich 1582 bis 9999 ein.Bei MM handelt es sich um zwei Ziffern von 01 bis 12 , die im angegebenen Jahr einen Monat darstellen.Bei dd handelt es sich um zwei Ziffern von 01 bis 31 , die im angegebenen Monat einen Tag darstellen. |
Zeichenlänge | 10 Stellen |
Genauigkeit, Dezimalstellen | 10, 0 |
Speichergröße | 3 Bytes, feste Größe |
Speicherstruktur | Eine ganze Zahl mit 3 Bytes speichert das Datum |
Genauigkeit | Ein Tag |
Standardwert | 1900-01-01 Dieser Wert wird für den angefügten Datumsteil für eine implizite Konvertierung von time in datetime2 oder DateTimeOffset verwendet. |
Kalender | Gregorianisch |
Benutzerdefinierte Genauigkeit in Sekundenbruchteilen | Nein |
Beachtung und Beibehaltung des Zeitzonenoffsets | Nein |
Beachtung der Sommerzeit | Nein |
Unterstützte Formate der Zeichenfolgenliterale für date
In den folgenden Listen werden die gültigen Zeichenfolgenliteralformate für den Datumsdatentyp angezeigt.
[m]m
, dd
und [yy]yy
stellen den Monat, den Tag und das Jahr in einer Zeichenfolge mit Schrägstrichen (/
), Bindestrichen (-
) oder Punkten (.
) als Trennzeichen dar.
Es werden nur vierstellige- oder zweistellige Jahreszahlen unterstützt. Verwenden Sie nach Möglichkeit immer vierstellige Jahreszahlen. Wenn Sie eine ganze Zahl angeben 0001
möchten 9999
, die das Abgeschnittene Jahr für die Interpretation von zweistelligen Jahren als vierstellige Jahre darstellt, verwenden Sie die zweistellige Option für die Serverkonfiguration für zwei Ziffern.
Für Informatica yyyy
ist der Bereich 1582
auf 9999
.
Ein zweistelliges Jahr, das kleiner als oder gleich den letzten zwei Ziffern des Umstellungsjahres ist, liegt im selben Jahrhundert wie das Umstellungsjahr. Ein zweistelliges Jahr, das größer als die letzten zwei Ziffern des Umstellungsjahres ist, liegt im Jahrhundert vor dem Umstellungsjahr. Wenn z. B. two-digit year cutoff den Standardwert 2049
annimmt, wird das zweistellige Jahr 49
als 2049
und das zweistellige Jahr 50
als 1950
interpretiert.
Die aktuelle Spracheinstellung bestimmt das Standard-Datumsformat. Sie können das Datumsformat ändern, indem Sie die Anweisungen SET LANGUAGE und SET DATEFORMAT verwenden.
Das ydm
-Format wird nicht für Datum unterstützt.
Zeichenfolgenliteralformate für Monat-Tag-Jahr
SET DATEFORMAT mdy;
[m]m/dd/[yy]yy
[m]m-dd-[yy]yy
Zeichenfolgenliteralformate für Monat-Jahr-Tag
SET DATEFORMAT myd;
[m]m/[yy]yy/dd
[m]m-[yy]yy-dd
[m]m.[yy]yy.dd
Zeichenfolgenliteralformate für Tag-Monat-Jahr
SET DATEFORMAT dmy;
dd/[m]m/[yy]yy
dd-[m]m-[yy]yy
dd.[m]m.[yy]yy
Zeichenfolgenliteralformate für Tag-Jahr-Monat
SET DATEFORMAT dym;
dd/[yy]yy/[m]m
dd-[yy]yy-[m]m
dd.[yy]yy.[m]m
Zeichenfolgenliteralformate für Jahr-Monat-Tag
SET DATEFORMAT ymd;
[yy]yy/[m]m/dd
[yy]yy-[m]m-dd
[yy]yy-[m]m-dd
Alphabetische Liste der Formate
[dd] mon[,] yyyy
dd mon[,][yy]yy
dd [yy]yy mon
[dd] yyyy mon
mon [dd][,] yyyy
mon dd[,] [yy]
mon yyyy [dd]
yyyy mon [dd]
yyyy [dd] mon
mon
stellt den vollständigen Monatsnamen oder die in der aktuellen Sprache angegebene Monatsabkürzung dar. Kommas sind optional, und die Großschreibung wird ignoriert.
Um Mehrdeutigkeiten zu vermeiden, sollten Sie vierstellige Jahreszahlen verwenden.
Wenn der Tag fehlt, wird der erste Tag des Monats angegeben.
ISO 8601-Liste der Formate
yyyy-MM-dd
yyyyMMdd
Identisch mit dem SQL-Standard. Dieses ist das einzige Format, das als internationaler Standard definiert ist.
Nicht analysierte Liste von Formaten
[yy]yyMMdd
yyyy[MMdd]
Die date-Daten können mit vier, sechs oder acht Ziffern angegeben werden. Eine Zeichenfolge mit sechs oder acht Ziffern wird immer als ymd
interpretiert. Monat und Tag müssen immer zweistellig sein. Eine vierstellige Zeichenfolge wird als das Jahr interpretiert.
ODBC-Datumsformat
{ d 'yyyy-MM-dd' }
ODBC-API-spezifisch
W3C-XML-Datumsformat
yyyy-MM-ddTZD
Wird für die XML/SOAP-Verwendung unterstützt.
TZD
ist der Zeitzonen-Kennzeichner (Z
, +hh:mm
oder -hh:mm
):
– Der Zeitzonenoffset wird durch
hh:mm
angegeben. Beihh
handelt es sich um zwei Ziffern im Bereich von0
bis14
, die die Anzahl der Stunden im Zeitzonenoffset darstellen.Bei
mm
handelt es sich um zwei Ziffern im Bereich von0
bis59
, die die Anzahl der zusätzlichen Minuten im Zeitzonenoffset darstellen.+
(plus) oder-
(minus) ist das erforderliche Zeichen des Zeitzonenoffsets. Dieses gibt an, ob der Zeitzonenoffset zu der koordinierten Weltzeit (Coordinated Universal Time, UTC) addiert oder von dieser subtrahiert wird, um die lokale Zeit zu erhalten. Der gültige Zeitzonenoffset liegt im Bereich von-14:00
bis+14:00
.
Kompatibilität mit ANSI und ISO 8601
date ist mit der ANSI SQL-Standarddefinition für den gregorianischen Kalender kompatibel:
Datetime-Datentypen ermöglichen die Speicherung von Datumsangaben im gregorianischen Format im Datumsbereich 0001-01-01 CE bis 9999-12-31 CE.
Das standardmäßige Format der Zeichenfolgenliterale, das für Downlevelclients verwendet wird, ist mit dem SQL-Standard konform, der als yyyy-MM-dd
definiert ist. Dieses Format ist mit der Definition von ISO 8601 für DATE
identisch.
Hinweis
Für Informatica ist der Bereich auf 1582-10-15
(15. Oktober 1582) bis 9999-12-31
(31. Dezember 9999) beschränkt.
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 |
String oder SqString |
date | yyyy-MM-dd |
SQL_WVARCHAR oder SQL_VARCHAR |
DBTYPE_WSTR oder DBTYPE_STR |
Java.sql.String |
String oder SqString |
datetime2 | yyyy-MM-dd HH:mm:ss[.nnnnnnn] |
SQL_WVARCHAR oder SQL_VARCHAR |
DBTYPE_WSTR oder DBTYPE_STR |
Java.sql.String |
String oder SqString |
datetimeoffset | yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm |
SQL_WVARCHAR oder SQL_VARCHAR |
DBTYPE_WSTR oder DBTYPE_STR |
Java.sql.String |
String oder SqString |
Konvertieren von date- und time-Daten
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
Daten und CONVERT
Funktionen mit Datums- und Uhrzeitdaten finden Sie unter CAST und CONVERT.
Konvertieren von date-Werten in andere Datums- und Uhrzeittypen
Der folgende Abschnitt veranschaulicht die Abläufe bei der Konvertierung des date-Datentyps in andere Datums- und Uhrzeittypen.
Beim Konvertieren in time(n) schlägt die Konvertierung fehl, und die Fehlermeldung 206 wird ausgegeben:
Operandentypkollision: date ist inkompatibel mit time.
Beim Konvertieren in datetime wird die Datumkomponente kopiert. Der folgende Code zeigt die Ergebnisse der Konvertierung eines date-Werts in einen datetime-Wert.
DECLARE @date AS DATE = '12-10-25';
DECLARE @datetime AS DATETIME = @date;
SELECT @date AS '@date',
@datetime AS '@datetime';
Hier sehen Sie das Ergebnis.
@date @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000
Beim Konvertieren in smalldatetime liegt der date-Wert im Bereich von smalldatetime, die Datumskomponente wird kopiert, und die Uhrzeitkomponente wird auf 00:00:00.000
festgelegt. Wenn der date-Wert nicht im Bereich eines smalldatetime-Werts liegt, wird die Fehlermeldung 242 gemeldet und der smalldatetime-Wert wird auf NULL
gestellt:
Bei der Konvertierung eines data-Datentyps in smalldatetime-Datentypen liegt der Wert außerhalb des gültigen Bereichs.
Der folgende Code zeigt die Ergebnisse der Konvertierung eines date-Werts in einen smalldatetime-Wert.
DECLARE @date AS DATE = '1912-10-25';
DECLARE @smalldatetime AS SMALLDATETIME = @date;
SELECT @date AS '@date',
@smalldatetime AS '@smalldatetime';
Hier sehen Sie das Ergebnis.
@date @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00
Beim Konvertieren in datetimeoffset(n) wird das Datum kopiert, und die Uhrzeit wird auf 00:00.0000000 +00:00
festgelegt. Der folgende Code zeigt die Ergebnisse der Konvertierung eines date-Werts in einen datetimeoffset(3)-Wert.
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;
SELECT @date AS '@date',
@datetimeoffset AS '@datetimeoffset';
Hier sehen Sie das Ergebnis.
@date @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00
Beim Konvertieren in datetime2(n) wird die Datumskomponente kopiert, und die Uhrzeitkomponente wird auf 00:00.000000
festgelegt. Der folgende Code zeigt die Ergebnisse der Konvertierung eines date-Werts in einen datetime2(3)-Wert.
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetime2 AS DATETIME2 (3) = @date;
SELECT @date AS '@date',
@datetime2 AS '@datetime2(3)';
Hier sehen Sie das Ergebnis.
@date @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000
Konvertieren von Zeichenfolgenliteralen in ein Datum
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 date-Datentyp dargestellt.
Eingabezeichenfolgenliteral | date |
---|---|
ODBC DATE | Dem datetime-Datentyp werden ODBC-Zeichenfolgenliterale zugeordnet. Jede Zuweisungsoperation von ODBC DATETIME-Literalen zu date-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 | Trivial |
Nur TIME | Standardwerte werden festgelegt. |
Nur TIMEZONE | Standardwerte werden festgelegt. |
DATE + TIME | Der DATE-Teil der Eingabezeichenfolge wird verwendet. |
DATE + TIMEZONE | Nicht zulässig. |
TIME + TIMEZONE | Standardwerte werden festgelegt. |
DATE + TIME + TIMEZONE | Der DATE-Teil von lokalem DATETIME wird verwendet. |
Beispiele
Im folgenden Beispiel werden die Ergebnisse der Umwandlung von einer Zeichenfolge in alle date- und time-Datentypen verglichen.
SELECT CAST ('2022-05-08 12:35:29.1234567 +12:15' AS TIME (7)) AS 'time',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST ('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST ('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2 (7)) AS 'datetime2',
CAST ('2022-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 | 2022-05-08 |
smalldatetime | 2022-05-08 12:35:00 |
datetime | 2022-05-08 12:35:29.123 |
datetime2 | 2022-05-08 12:35:29.1234567 |
datetimeoffset | 2022-05-08 12:35:29.1234567 +12:15 |