Dela via


date (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Förhandsversion av Microsoft Fabric

Definierar ett datum i SQL Server. Datumdatatypen introducerades i SQL Server 2008 (10.0.x).

date description

Property Value
Syntax DATE
Usage DECLARE @MyDate DATE

CREATE TABLE Table1 (Column1 DATE)
Standardformat för strängliteral

(används för klient på nednivå)
yyyy-MM-dd

Mer information finns i avsnittet Bakåtkompatibilitet för klienter på nednivå .
Range 0001-01-01 through 9999-12-31 (1582-10-15 via 9999-12-31 för Informatica)

1 januari 1 CE (common era) till och med 31 december 9999 CE (15 oktober 1582 CE till och med 31 december 9999 CE för Informatica)
Element ranges yyyy är fyra siffror från 0001 till 9999 som representerar ett år. Informatica begränsar yyyy intervallet 1582 till 9999.

MM är två siffror från 01 till 12 som representerar en månad under det angivna året.

dd är två siffror från 01 till 31, beroende på månad, vilket representerar en dag i den angivna månaden.
Character length 10 positions
Precision, scale 10, 0
Storage size 3 byte, fast
Storage structure ett 3-bytes heltalslagerdatum
Accuracy One day
Default value 1900-01-01

Det här värdet används för den bifogade datumdelen för implicit konvertering från tid till datetime2 eller datetimeoffset.
Calendar Gregorian
Användardefinierad bråkdels sekundprecision No
Tidszonsförskjutningsmedveten och konservering No
Sommartidsmedveten No

Strängliterala format som stöds för datum

I följande listor visas giltiga strängliterala format för datumdatatypen .

[m]m, dd, och [yy]yy representerar månad, dag och år i en sträng med snedstreck (/), bindestreck (-) eller punkter (.) som avgränsare.

Endast fyrsiffriga eller tvåsiffriga år stöds. Använd fyrsiffriga år när det är möjligt. Om du vill ange ett heltal från 0001 till 9999 som representerar brytåret för att tolka tvåsiffriga år som fyrsiffriga år använder du alternativet för serverkonfiguration med två siffror år cutoff .

För Informatica yyyy är begränsad till intervallet 1582 till 9999.

Ett tvåsiffrigt år som är mindre än eller lika med de två sista siffrorna i brytåret är i samma århundrade som brytåret. Ett tvåsiffrigt år som är större än de två sista siffrorna i brytåret är i det århundrade som kommer före brytåret. Om den tvåsiffriga årsgränsen till exempel är standard 2049tolkas det tvåsiffriga året 49 som 2049 och det tvåsiffriga året 50 tolkas som 1950.

Den aktuella språkinställningen avgör standardformatet för datum. Du kan ändra datumformatet med hjälp av SET LANGUAGE - och SET DATEFORMAT-uttrycken .

Formatet ydm stöds inte för datum.

Strängliterala format för månad-dag-år

SET DATEFORMAT mdy;
  • [m]m/dd/[yy]yy
  • [m]m-dd-[yy]yy

Strängliterala format för månad-år-dag

SET DATEFORMAT myd;
  • [m]m/[yy]yy/dd
  • [m]m-[yy]yy-dd
  • [m]m.[yy]yy.dd

Strängliterala format för dag-månad-år

SET DATEFORMAT dmy;
  • dd/[m]m/[yy]yy
  • dd-[m]m-[yy]yy
  • dd.[m]m.[yy]yy

Strängliterala format för dag-år-månad

SET DATEFORMAT dym;
  • dd/[yy]yy/[m]m
  • dd-[yy]yy-[m]m
  • dd.[yy]yy.[m]m

Strängliterala format för årsmånadsdag

SET DATEFORMAT ymd;
  • [yy]yy/[m]m/dd
  • [yy]yy-[m]m-dd
  • [yy]yy-[m]m-dd

Alfabetisk lista över format

  • [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 representerar det fullständiga månadsnamnet, eller månadsförkortningen, som anges på det aktuella språket. Kommatecken är valfria och versaler ignoreras.

Använd fyrsiffriga år för att undvika tvetydighet.

Om dagen saknas anges den första dagen i månaden.

ISO 8601-lista över format

  • yyyy-MM-dd
  • yyyyMMdd

Samma som SQL-standarden. Det här formatet är det enda format som definierats som en internationell standard.

Oparerad lista över format

  • [yy]yyMMdd
  • yyyy[MMdd]

Datumdata kan anges med fyra, sex eller åtta siffror. En sexsiffrig eller åttasiffrig sträng tolkas alltid som ymd. Månad och dag måste alltid vara två siffror. En fyrsiffrig sträng tolkas som året.

ODBC-datumformat

  • { d 'yyyy-MM-dd' }

ODBC API specifikt.

W3C XML-datumformat

  • yyyy-MM-ddTZD

Stöds för XML/SOAP-användning.

TZD är tidszonsdesignatorn (Z eller +hh:mm-hh:mm):

  • hh:mm representerar tidszonsförskjutningen. hh är två siffror, från 0 till 14, som representerar antalet timmar i tidszonsförskjutningen.

  • mm är två siffror, från 0 till 59, som representerar antalet ytterligare minuter i tidszonsförskjutningen.

  • + (plus) eller - (minus) är det obligatoriska tecknet på tidszonsförskjutningen. Det här tecknet anger att tidszonsförskjutningen läggs till eller subtraheras från UTC-tiden (Coordinated Universal Times) för att hämta den lokala tiden. Det giltiga intervallet för tidszonsförskjutning är från -14:00 till +14:00.

ANSI- och ISO 8601-efterlevnad

datum överensstämmer med ANSI SQL-standarddefinitionen för den gregorianska kalendern:

Datetime-datatyper tillåter att datum i gregorianskt format lagras i datumintervallet 0001-01-01 CE till 9999-12-31 CE.

Standardformatet strängliteral, som används för klienter på nednivå, uppfyller sql-standardformuläret som definieras som yyyy-MM-dd. Det här formatet är samma som ISO 8601-definitionen för DATE.

Note

För Informatica är intervallet begränsat till 1582-10-15 (15 oktober 1582 CE) till 9999-12-31 (31 december 9999 CE).

Bakåtkompatibilitet för klienter på nednivå

Vissa klienter på nednivå stöder inte datatyperna tid, datum, datetime2 och datetimeoffset . I följande tabell visas typmappningen mellan en instans på hög nivå av SQL Server och klienter på nednivå.

SQL Server-datatyp Standardformat för strängliteral som skickas till klient på nednivå Down-level ODBC Down-level OLEDB Down-level JDBC Down-level SQLCLIENT
time hh:mm:ss[.nnnnnnn] SQL_WVARCHAR eller SQL_VARCHAR DBTYPE_WSTR eller DBTYPE_STR Java.sql.String String eller SqString
date yyyy-MM-dd SQL_WVARCHAR eller SQL_VARCHAR DBTYPE_WSTR eller DBTYPE_STR Java.sql.String String eller SqString
datetime2 yyyy-MM-dd HH:mm:ss[.nnnnnnn] SQL_WVARCHAR eller SQL_VARCHAR DBTYPE_WSTR eller DBTYPE_STR Java.sql.String String eller SqString
datetimeoffset yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm SQL_WVARCHAR eller SQL_VARCHAR DBTYPE_WSTR eller DBTYPE_STR Java.sql.String String eller SqString

Konvertera datum- och tidsdata

När du konverterar till datum- och tidsdatatyper avvisar SQL Server alla värden som inte identifieras som datum eller tider. Information om hur du använder funktionerna CAST och CONVERT med datum- och tidsdata finns i CAST- och CONVERT-.

Konvertera datum till andra datum- och tidstyper

I det här avsnittet beskrivs vad som händer när du konverterar en datumdatatyp till andra datatyper för datum och tid.

När konverteringen är till time(n), misslyckas konverteringen och felmeddelandet 206 utlöses:

Konflikt av operandtyp: datumet är inte tidskompatibelt.

Om konverteringen är till datetime kopieras datumkomponenten. Följande kod visar resultatet av att konvertera ett datumvärde till ett datetime-värde .

DECLARE @date AS DATE = '12-10-25';

DECLARE @datetime AS DATETIME = @date;

SELECT @date AS '@date',
       @datetime AS '@datetime';

Här är resultatet.

@date      @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000

När konverteringen är till smalldatetime ligger datumvärdet i intervallet för en smalldatetime, datumkomponenten kopieras och tidskomponenten är inställd på 00:00:00.000. När datumvärdet ligger utanför intervallet för ett smalldatetime-värde utlöses felmeddelandet 242 och smalldatetime-värdet anges till NULL:

Konverteringen av en datumdatatyp till en smalldatetime-datatyper resulterade i ett out-of-range-värde.

Följande kod visar resultatet av att konvertera ett datumvärde till ett smalldatetime-värde .

DECLARE @date AS DATE = '1912-10-25';

DECLARE @smalldatetime AS SMALLDATETIME = @date;

SELECT @date AS '@date',
       @smalldatetime AS '@smalldatetime';

Här är resultatet.

@date      @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00

För konvertering till datetimeoffset(n)kopieras datumet och tiden är inställd på 00:00.0000000 +00:00. Följande kod visar resultatet av att konvertera ett datumvärde till ett datetimeoffset(3) -värde.

DECLARE @date AS DATE = '1912-10-25';

DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;

SELECT @date AS '@date',
       @datetimeoffset AS '@datetimeoffset';

Här är resultatet.

@date      @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00

När konverteringen är till datetime2(n) kopieras datumkomponenten och tidskomponenten är inställd på 00:00.000000. Följande kod visar resultatet av konverteringen av ett datumvärde till ett datetime2(3) -värde.

DECLARE @date AS DATE = '1912-10-25';

DECLARE @datetime2 AS DATETIME2 (3) = @date;

SELECT @date AS '@date',
       @datetime2 AS '@datetime2(3)';

Här är resultatet.

@date      @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000

Konvertera strängliteraler till datum

Konverteringar från strängliteraler till datum- och tidstyper tillåts om alla delar av strängarna är i giltiga format. Annars utlöses ett körningsfel. Implicita konverteringar eller explicita konverteringar som inte anger ett format, från datum- och tidstyper till strängliteraler, är i standardformatet för den aktuella sessionen. I följande tabell visas reglerna för att konvertera en strängliteral till datumdatatypen .

Indatasträngliteral date
ODBC DATE ODBC-stränglitaraler mappas till datatypen datetime . Tilldelningsåtgärder från ODBC DATETIME-literaler till en datumtyp orsakar en implicit konvertering mellan datetime och den typ som konverteringsreglerna definierar.
ODBC TIME Se föregående ODBC DATE-regel.
ODBC DATETIME Se föregående ODBC DATE-regel.
DATE only Trivial
TIME only Standardvärden anges.
TIMEZONE only Standardvärden anges.
DATUM + TID Date-delen av indatasträngen används.
DATUM + TIDSZON Not allowed.
TID + TIDSZON Standardvärden anges.
DATUM + TID + TIDSZON DATE-delen av lokal DATETIME används.

Examples

I följande exempel jämförs resultatet av gjutning av en sträng med varje datum- och tidsdatatyp.

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

Här är resultatet.

Data type 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