Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-databas i Microsoft Fabric
Definierar ett datum som kombineras med en tid på dagen med bråksekunder som baseras på en 24-timmarsklocka.
Undvik att använda datetime- för nytt arbete. Använd i stället tid, datum, datetime2och datetimeoffset datatyper. Dessa typer överensstämmer med SQL Standard och är mer portabla. tid, datetime2 och datetimeoffset ge mer precision i sekunder. datetimeoffset ger tidszonsstöd för globalt distribuerade program.
Beskrivning
Egenskap | Värde |
---|---|
Syntax | DATETIME |
Användning | DECLARE @MyDatetime DATETIME; CREATE TABLE Table1 (Column1 DATETIME); |
Standardsträngliterala format (används för klient på nednivå) | Ej tillämpligt |
datumintervall | 1753-01-01 (1 januari 1753) till och med 9999-12-31 (31 december 9999) |
tidsintervall | 00:00:00 till 23:59:59.997 |
Tidszonsförskjutningsintervall | Ingen |
elementintervall |
yyyy är fyra siffror från 1753 till 9999 som representerar ett år.MM är två siffror, från 01 till 12 , som representerar en månad under det angivna året.dd är två siffror, allt från 01 till 31 beroende på månad, som representerar en dag i den angivna månaden.HH är två siffror, från 00 till 23 , som representerar timmen.mm är två siffror, från 00 till 59 , som representerar minuten.ss är två siffror, från 00 till 59 , som representerar den andra.n* är noll till tre siffror, från 0 till 999 , som representerar bråksekunderna. |
Teckenlängd | Minst 19 positioner till högst 23 |
Lagringsstorlek | 8 byte |
noggrannhet | Avrundad till steg om .000 , .003 eller .007 sekunder |
standardvärde | 1900-01-01 00:00:00 |
kalender | Gregorianskt (inkluderar det kompletta antalet år) |
Användardefinierad bråkdels sekundprecision | Nej |
Tidszonsförskjutningsmedveten och bevarande | Nej |
sommartidsmedveten | Nej |
Strängliterala format som stöds för datetime
I följande tabeller visas de strängliterala format som stöds för datetime-. Förutom ODBC är datetime strängliteraler inom enkla citattecken ('
), till exempel 'string_literaL'
. Om miljön inte är us_english
ska strängliteralerna vara i Unicode-format N'string_literaL'
.
Numeriskt format
Du kan ange datumdata med en angiven numerisk månad. Till exempel representerar 5/20/97
den tjugonde dagen i maj 1997. När du använder numeriskt datumformat anger du månad, dag och år i en sträng som använder snedstreck (/
), bindestreck (-
) eller punkter (.
) som avgränsare. Den här strängen måste visas i följande formulär:
<number separator number separator number [time] [time]>
När språket är inställt på us_english
är standardordningen för datumet mdy
(månad, dag, år). Du kan ändra datumordningen med hjälp av SET DATEFORMAT-instruktionen.
Inställningen för SET DATEFORMAT
avgör hur datumvärden tolkas. Om ordningen inte matchar inställningen tolkas inte värdena som datum. Out-of-order-datum kan misstolkas som out-of-range eller med fel värden. Till exempel kan 12/10/08
tolkas som ett av sex datum, beroende på inställningen DATEFORMAT
. Ett år i fyra delar tolkas som året.
Datumformat | Ordning |
---|---|
[0]4/15/[19]96 |
mdy |
[0]4-15-[19]96 |
mdy |
[0]4.15.[19]96 |
mdy |
[0]4/[19]96/15 |
myd |
15/[0]4/[19]96 |
dmy |
15/[19]96/[0]4 |
dym |
[19]96/15/[0]4 |
ydm |
[19]96/[0]4/15 |
ymd |
Tidsformat |
---|
14:30 |
14:30[:20:997] |
14:30[:20.9] |
4am |
4 PM |
Alfabetiskt format
Du kan ange datumdata med en månad som anges som det fullständiga månadsnamnet. Till exempel April
, eller månadsförkortningen för Apr
, som anges på det aktuella språket. Kommatecken är valfria och versaler ignoreras.
Här följer några riktlinjer för att använda alfabetiska datumformat:
Omsluta datum- och tidsdata inom enkla citattecken (
'
). För andra språk än engelska använder duN''
.Tecken som omges av hakparenteser är valfria.
Om du bara anger de två sista siffrorna för året är värdena mindre än de två sista siffrorna i värdet för tvåsiffrig årsgräns konfigurationsalternativet är i samma århundrade som brytåret. Värden som är större än eller lika med värdet för det här alternativet är i det århundrade som kommer före brytåret. Om är
2050
(standard) tolkas till exempel25
som2025
och50
tolkas som1950
. Använd fyrsiffriga år för att undvika tvetydighet.Om dagen saknas anges den första dagen i månaden.
Inställningen
SET DATEFORMAT
session tillämpas inte när du anger månaden i alfabetisk form.
Alfabetisk |
---|
Apr[il] [15][,] 1996 |
Apr[il] 15[,] [19]96 |
Apr[il] 1996 [15] |
[15] Apr[il][,] 1996 |
15 Apr[il][,][19]96 |
15 [19]96 apr[il] |
[15] 1996 apr[il] |
1996 APR[IL] [15] |
1996 [15] APR[IL] |
ISO 8601-format
Om du vill använda FORMATET ISO 8601 måste du ange varje element i formatet, inklusive T
, kolon (:
) och perioden (.
) som visas i formatet.
Hakparenteserna anger att bråkdelen av den andra komponenten är valfri. Tidskomponenten anges i 24-timmarsformat.
T
anger början av tidsdelen av datetime- värde.
Fördelen med att använda FORMATET ISO 8601 är att det är en internationell standard med entydig specifikation. Det här formatet påverkas inte heller av inställningen SET DATEFORMAT
eller SET LANGUAGE.
Exempel:
2004-05-23T14:25:10
2004-05-23T14:25:10.487
ISO 8601 |
---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
Format som inte är skilt
Det här formatet liknar FORMATET ISO 8601, förutom att det inte innehåller några datumavgränsare.
Ej skild |
---|
yyyyMMdd HH:mm:ss[.mmm] |
ODBC-format
ODBC-API:et definierar escape-sekvenser för att representera datum- och tidsvärden, som ODBC anropar tidsstämpeldata. Det här ODBC-tidsstämpelformatet stöds också av ole db-språkdefinitionen (DBGUID-SQL) som stöds av Microsoft OLE DB-providern för SQL Server. Program som använder ADO-, OLE DB- och ODBC-baserade API:er kan använda det här ODBC-tidsstämpelformatet för att representera datum och tider.
ODBC-tidsstämpelns escape-sekvenser är av formatet: { <literal_type> '<constant_value>' }
:
<literal_type>
anger typen av escape-sekvens. Tidsstämplar har tre<literal_type>
-specificerare:-
d
= endast datum -
t
= endast tid -
ts
= tidsstämpel (tid + datum)
-
<constant_value>
är värdet för escape-sekvensen.<constant_value>
måste följa dessa format för varje<literal_type>
:-
d
:yyyy-MM-dd
-
t
:hh:mm:ss[.fff]
-
ts
:yyyy-MM-dd HH:mm:ss[.fff]
-
ODBC |
---|
{ ts '1998-05-02 01:23:56.123' } |
{ d '1990-10-02' } |
{ t '13:33:41' } |
Avrundning av datetime fractional second precision
datetime- värden avrundas till steg om .000
, .003
eller .007
sekunder, enligt följande exempel.
SELECT '01/01/2024 23:59:59.999' AS [User-specified value],
CAST('01/01/2024 23:59:59.999' AS DATETIME) AS [System stored value]
UNION SELECT '01/01/2024 23:59:59.998', CAST('01/01/2024 23:59:59.998' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.997', CAST('01/01/2024 23:59:59.997' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.996', CAST('01/01/2024 23:59:59.996' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.995', CAST('01/01/2024 23:59:59.995' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.994', CAST('01/01/2024 23:59:59.994' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.993', CAST('01/01/2024 23:59:59.993' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.992', CAST('01/01/2024 23:59:59.992' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.991', CAST('01/01/2024 23:59:59.991' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.990', CAST('01/01/2024 23:59:59.990' AS DATETIME);
Här är resultatuppsättningen.
Användarangivet värde | System lagrat värde |
---|---|
01/01/2024 23:59:59.999 |
2024-01-02 00:00:00.000 |
01/01/2024 23:59:59.998 01/01/2024 23:59:59.997 01/01/2024 23:59:59.996 01/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.994 01/01/2024 23:59:59.993 01/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.991 01/01/2024 23:59:59.990 |
2024-01-01 23:59:59.990 |
ANSI- och ISO 8601-efterlevnad
datetime inte är ANSI- eller ISO 8601-kompatibel.
Konvertera datum- och tidsdata
När du konverterar till datatyper för datum och tid avvisar databasmotorn alla värden som den inte kan identifiera som datum eller tider. Information om hur du använder funktionerna CAST
och CONVERT
med datum- och tidsdata finns i CAST- och CONVERT-.
Konvertera andra datum- och tidstyper till datatypen datetime
I det här avsnittet beskrivs vad som händer när andra datatyper för datum och tid konverteras till datetime datatyp.
När konverteringen kommer från datumkopieras året, månaden och dagen. Tidskomponenten är inställd på 00:00:00.000
. Följande kod visar resultatet av konvertering av ett DATE
-värde till ett DATETIME
värde.
DECLARE @date DATE = '12-21-16';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Här är resultatuppsättningen.
@datetime @date
------------------------ -----------
2016-12-21 00:00:00.000 2016-12-21
I föregående exempel används ett regionspecifikt datumformat (MM-DD-YY
).
DECLARE @date DATE = '12-21-16';
Du bör uppdatera exemplet så att det matchar formatet för din region.
Du kan också slutföra exemplet med iso 8601-kompatibelt datumformat (yyyy-MM-dd
). Till exempel:
DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
När konverteringen kommer från tid(n)kopieras tidskomponenten och datumkomponenten anges till 1900-01-01
. När bråkprecisionen för tid(n) värdet är större än tre siffror trunkeras värdet så att det passar. I följande exempel visas resultatet av konverteringen av ett TIME(4)
-värde till ett DATETIME
värde.
DECLARE @time TIME(4) = '12:10:05.1237';
DECLARE @datetime DATETIME = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
Här är resultatuppsättningen.
@datetime @time
------------------------ --------------
1900-01-01 12:10:05.123 12:10:05.1237
När konverteringen kommer från smalldatetimekopieras timmar och minuter. Sekunderna och bråksekunderna är inställda på 0
. Följande kod visar resultatet av konvertering av ett SMALLDATETIME
-värde till ett DATETIME
värde.
DECLARE @smalldatetime SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime DATETIME = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
Här är resultatuppsättningen.
@datetime @smalldatetime
------------------------ --------------------
2016-12-01 12:32:00.000 2016-12-01 12:32:00
När konverteringen kommer från datetimeoffset(n)kopieras datum- och tidskomponenterna. Tidszonen trunkeras. När bråkprecisionen för datetimeoffset(n) värdet är större än tre siffror trunkeras värdet. I följande exempel visas resultatet av konverteringen av ett DATETIMEOFFSET(4)
-värde till ett DATETIME
värde.
DECLARE @datetimeoffset DATETIMEOFFSET(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime DATETIME = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
Här är resultatuppsättningen.
@datetime @datetimeoffset
------------------------ -------------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
När konverteringen kommer från datetime2(n)kopieras datum och tid. När bråkprecisionen för datetime2(n) värdet är större än tre siffror trunkeras värdet. I följande exempel visas resultatet av konverteringen av ett DATETIME2(4)
-värde till ett DATETIME
värde.
DECLARE @datetime2 DATETIME2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime DATETIME = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
Här är resultatuppsättningen.
@datetime @datetime2
------------------------ -------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
Exempel
I följande exempel jämförs resultatet av gjutning av en sträng med varje datum och tid datatyp.
SELECT CAST('2024-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';
Här är resultatuppsättningen.
Datatyp | Utdata |
---|---|
time |
12:35:29.1234567 |
date |
2024-05-08 |
smalldatetime |
2024-05-08 12:35:00 |
datetime |
2024-05-08 12:35:29.123 |
datetime2 |
2024-05-08 12:35:29.1234567 |
datetimeoffset |
2024-05-08 12:35:29.1234567 +12:15 |