Share via


date (Transact-SQL)

Definiert ein Datum.

Beschreibung von date

Eigenschaft

Wert

Syntax

date

Verwendung

DECLARE @MyDate date

CREATE TABLE Table1 ( Column1 date )

Standardmäßiges Format der Zeichenfolgenliterale

(wird für Downlevelclients verwendet)

YYYY-MM-DD            

Weitere Informationen finden Sie im nachfolgenden Abschnitt "Abwärtskompatibilität für Downlevelclients".

Bereich

0001-01-01 bis 9999-12-31

1. Januar 1 n. Chr. bis 31. Dezember 9999 n. Chr.

Elementbereiche

Bei YYYY handelt es sich um vier Ziffern von 0001 bis 9999, die ein Jahr darstellen.

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

1 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 Tabellen werden die gültigen Formate der Zeichenfolgenliterale für den date-Datentyp aufgeführt.

Numeric

Beschreibung

mdy                         

[m]m/dd/[yy]yy       

[m]m-dd-[yy]yy       

[m]m.dd.[yy]yy       

myd                         

mm/[yy]yy/dd       

mm-[yy]yy/dd       

[m]m.[yy]yy.dd       

dmy                         

dd/[m]m/[yy]yy       

dd-[m]m-[yy]yy       

dd.[m]m.[yy]yy       

dym                         

dd/[yy]yy/[m]m       

dd-[yy]yy-[m]m       

dd.[yy]yy.[m]m       

ymd                         

[yy]yy/[m]m/dd       

[yy]yy-[m]m-dd       

[yy]yy-[m]m-dd       

[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 vier- oder zweistellige Jahreszahlen unterstützt. Verwenden Sie nach Möglichkeit immer vierstellige Jahreszahlen. Um eine ganze Zahl zwischen 0001 und 9999 anzugeben, die das Umstellungsjahr für das Interpretieren zweistelliger Jahre als vierstellige Jahre darstellt, verwenden Sie die Konfigurieren der Serverkonfigurationsoption Umstellungsjahr für Angaben mit zwei Ziffern.

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 oder gleich den 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.

Das Standarddatumsformat wird von der aktuellen Spracheinstellung bestimmt. Sie können das Datumsformat ändern, indem Sie die Anweisungen SET LANGUAGE und SET DATEFORMAT verwenden.

Das ydm-Format wird nicht für date unterstützt.

Alphabetisch

Beschreibung

mon [dd][,] yyyy      

mon dd[,] [yy]yy      

mon yyyy [dd]          

[dd] mon[,] yyyy      

dd mon[,][yy]yy       

dd [yy]yy mon         

[dd] yyyy mon         

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

Beschreibung

YYYY-MM-DD            

YYYYMMDD               

Identisch mit dem SQL-Standard. Dies ist das einzige Format, das als internationaler Standard definiert ist.

Unstrukturiert

Beschreibung

[yy]yymmdd            

yyyy[mm][dd]          

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 Jahr interpretiert.

ODBC

Beschreibung

{ d 'yyyy-mm-dd' }   

ODBC-API-spezifisch

Kann in SQL Server 2012 sowie in SQL Server 2005 verwendet werden.

W3C XML-Format

Beschreibung

yyyy-mm-ddTZD      

Speziell unterstützt für die XML/SOAP-Verwendung.

TZD ist der Zeitzonenkennzeichner (Z oder +hh:mm oder -hh:mm):

  • Der Zeitzonenoffset wird durch hh:mm angegeben. Bei hh handelt es sich um zwei Ziffern im Bereich von 0 bis 14, die die Anzahl der Stunden im Zeitzonenoffset darstellen.

  • Bei MM handelt es sich um zwei Ziffern im Bereich von 0 bis 59, 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 entspricht dem ANSI SQL-Standarddefinition für den gregorianischen Kalender: "NOTE 85 - Bei Datetime-Datentypen können Daten im gregorianischen Format im Datumsbereich 0001–01–01 CE through 9999–12–31 CE gespeichert werden."

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.

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 SqlString

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 von date-Werten in andere Datums- und Uhrzeittypen

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

Zieldatentyp der Konvertierung

Konvertierungsinformationen

time(n)

Bei der Konvertierung tritt ein Fehler auf und die Fehlermeldung 206 wird angezeigt: "Operandentypkollision: Date ist inkompatibel mit Time".

datetime

Das Datum wird kopiert, und die Uhrzeitkomponente wird auf 00:00:00.000 festgelegt. Der folgende Code zeigt die Ergebnisse der Konvertierung eines date-Werts in einen datetime-Wert.

DECLARE @date date= '12-10-25';
DECLARE @datetime datetime= @date;
SELECT @date AS '@date', @datetime AS '@datetime';
--Result
--@date      @datetime
------------ -----------------------
--2025-12-10 2025-12-10 00:00:00.000
--
--(1 row(s) affected)

smalldatetime

Wenn der date-Wert im Bereich von smalldatetime liegt, wird die Datumskomponente kopiert, und die Zeitkomponente wird auf 00:00:00 gesetzt. Wenn der date-Wert außerhalb des Bereichs eines smalldatetime-Werts liegt, wird Fehlermeldung 242 ausgelöst: "Die Konvertierung eines date-Datentyps in einen smalldatetime-Datentyp ergibt einen Wert außerhalb des gültigen Bereichs, und der smalldatetime-Wert wird auf NULL festgelegt.

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

DECLARE @date date= '1912-10-25';
DECLARE @smalldatetime smalldatetime = @date;
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';
--Result
--@date      @smalldatetime
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00
--
--(1 row(s) affected)

datetimeoffset(n)

Das Datum wird kopiert, und die Zeit 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 date = '1912-10-25';
DECLARE @datetimeoffset datetimeoffset(3) = @date;
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';
--Result
--@date      @datetimeoffset
------------ ------------------------------
--1912-10-25 1912-10-25 00:00:00.000 +00:00
--
--(1 row(s) affected)

datetime2(n)

Die Datumskomponente wird kopiert, und die Uhrzeitkomponente wird unabhängig vom Wert von (n) auf 00:00:00.00 festgelegt.

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

DECLARE @date date = '1912-10-25';
DECLARE @datetime2 datetime2(3) = @date;
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';
--Result
--@date      @datetime2(3)
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00.00
--
--(1 row(s) affected)

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.

DATUM + 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 Datums- und Uhrzeitdatentypen 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)