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
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Förhandsversion av Microsoft Fabric
Definierar ett datum som kombineras med en tid på dagen som baseras på 24-timmarsklocka. datetime2 kan betraktas som ett tillägg av den befintliga datetime-typen som har ett större datumintervall, en större standardfraktioneringsprecision och valfri användardefinierad precision.
datetime2 description
| Property | Value |
|---|---|
| Syntax | datetime2 [ (precision för bråk sekunder) ] |
| Usage | DECLARE @MyDatetime2 datetime2(7);CREATE TABLE Table1 (Column1 datetime2(7)); |
| Standardformat för strängliteral (används för klient på nednivå) |
yyyy-MM-dd HH:mm:ss[.nnnnnnn]Mer information finns i Bakåtkompatibilitet för klienter på nednivå senare i den här artikeln. |
| Date range |
0001-01-01 genom 9999-12-311 januari, 1 CE till 31 december 9999 CE |
| Time range |
00:00:00 genom 23:59:59.9999999 |
| Tidszonsförskjutningsintervall | None |
| Element ranges |
yyyy är ett fyrsiffrigt tal, från 0001 till och med 9999, som representerar ett år.MM är ett tvåsiffrigt tal som sträcker sig från 01 till 12, som representerar en månad under det angivna året.dd är ett tvåsiffrigt tal, från 01 till 31 beroende på månad, som representerar en dag i den angivna månaden.HH är ett tvåsiffrigt tal som sträcker sig från 00 till 23, som representerar timmen.mm är ett tvåsiffrigt tal som sträcker sig från 00 till 59, som representerar minuten.ss är ett tvåsiffrigt tal, från 00 till 59, som representerar det andra.n* är ett noll- till sjusiffrigt tal från 0 till 9999999, som representerar bråksekunderna. I Informatica trunkeras bråksekunderna när n är mindre än 3. |
| Character length | Minst 19 positioner (yyyy-MM-dd HH:mm:ss) till högst 27 (yyyy-MM-dd HH:mm:ss.0000000) |
| Precision, scale | 0 till 7 siffror, med en noggrannhet på 100 nanosekunder (100 ns). Standardprecisionen är 7 siffror. I Microsoft Fabric Data Warehouse kan den här precisionen vara ett heltal från 0 till 6, utan standard. Precision måste anges i Microsoft Fabric Data Warehouse. |
| Lagringsstorlek 1 | 6 byte för precision som är mindre än 3. 7 byte för precision 3 eller 4. All annan precision kräver 8 byte. 2 |
| Accuracy | 100 nanoseconds |
| Default value | 1900-01-01 00:00:00 |
| Calendar | Gregorian |
| Användardefinierad bråkdels sekundprecision | Yes |
| Tidszonsförskjutningsmedveten och konservering | No |
| Sommartidsmedveten | No |
1 Angivna värden är för okomprimerade radarkiv. Användning av datakomprimering eller columnstore kan ändra lagringsstorleken för varje precision. Dessutom kan lagringsstorleken på disken och i minnet skilja sig åt. Datetime2-värden kräver till exempel alltid 8 byte i minnet när batchläge används.
2 När ett datetime2-värde omvandlas till ett varbinary-värde läggs en extra byte till i varbinary-värdet för att lagra precision.
Information om metadata för datatyp finns i sys.systypes eller TYPEPROPERTY. Precision och skala är variabel för vissa datum- och tidsdatatyper. Information om hur du hämtar precisionen och skalan för en kolumn finns i COLUMNPROPERTY, COL_LENGTH eller sys.columns.
Strängliterala format som stöds för datetime2
I följande tabeller visas de ISO 8601- och ODBC-strängliteralformat som stöds för datetime2. Information om alfabetiska, numeriska, oparerade format och tidsformat för datum- och tidsdelarna för datetime2 finns i datum och tid.
| ISO 8601 | Descriptions |
|---|---|
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] |
Det här formatet påverkas inte av nationella inställningar för SET LANGUAGE session och SET DATEFORMAT .
T, kolonen (:) och perioden (.) ingår i strängliteralen, till exempel 2024-05-02T19:58:47.1234567. |
| ODBC | Description |
|---|---|
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } |
ODBC-API:et är specifikt: Antalet siffror till höger om decimaltecknet, som representerar bråksekunderna, kan anges från 0 upp till 7 (100 nanosekunder). |
ANSI- och ISO 8601-efterlevnad
ANSI- och ISO 8601-kompatibiliteten för datum och tid gäller för datetime2.
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_WSTRor DBTYPE_STR | Java.sql.String | Sträng eller SqString |
| date | yyyy-MM-dd | SQL_WVARCHAR eller SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Sträng eller SqString |
| datetime2 | yyyy-MM-dd HH:mm:ss[.nnnnnnn] | SQL_WVARCHAR eller SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Sträng eller SqString |
| datetimeoffset | åååå-MM-dd HH:mm:ss[.nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR eller SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Sträng eller SqString |
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 datetime2
I det här avsnittet beskrivs vad som händer när andra datatyper för datum och tid konverteras till datatypen datetime2 .
När konverteringen kommer från datumkopieras året, månaden och dagen. Tidskomponenten är inställd på 00:00:00.0000000. Följande kod visar resultatet av konvertering av ett date-värde till ett datetime2 värde.
DECLARE @date AS DATE = '12-21-16';
DECLARE @datetime2 AS DATETIME2 = @date;
SELECT @datetime2 AS '@datetime2',
@date AS '@date';
Här är resultatet.
@datetime2 @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21
När konverteringen är från tid(n)kopieras tidskomponenten och datumkomponenten är inställd på 1900-01-01. I följande exempel visas resultatet av konverteringen av ett tidsvärde (7) till ett datetime2-värde .
DECLARE @time AS TIME (7) = '12:10:16.1234567';
DECLARE @datetime2 AS DATETIME2 = @time;
SELECT @datetime2 AS '@datetime2',
@time AS '@time';
Här är resultatet.
@datetime2 @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567
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 datetime2 värde.
DECLARE @smalldatetime AS SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime2 AS DATETIME2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2',
@smalldatetime AS '@smalldatetime';
Här är resultatet.
@datetime2 @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
När konverteringen kommer från datetimeoffset(n) kopieras datum- och tidskomponenterna. Tidszonen trunkeras. I följande exempel visas resultatet av konverteringen av ett datetimeoffset(7)-värde till ett datetime2 värde.
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';
Här är resultatet.
@datetime2 @datetimeoffset
--------------------------- ----------------------------------
2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00
När konverteringen är från datetime kopieras datum och tid. Bråkprecisionen utökas till 7 siffror. I följande exempel visas resultatet av konverteringen av ett datetime-värde till ett datetime2 värde.
DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';
DECLARE @datetime2 AS DATETIME2 = @datetime;
SELECT @datetime2 AS '@datetime2',
@datetime AS '@datetime';
Här är resultatet.
@datetime2 @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
Casta explicit till datetime2 när du använder datetime
Under databaskompatibilitetsnivå 130 och senare visar implicita konverteringar från datetime till datetime2 datatyper förbättrad noggrannhet genom att ta hänsyn till bråk millisekunderna, vilket resulterar i olika konverterade värden, enligt föregående exempel. Använd explicit gjutning till datatypen datetime2 när det finns ett blandat jämförelsescenario mellan datatyperna datetime och datetime2 . Mer information finns i FÖRBÄTTRINGAR av SQL Server och Azure SQL Database när det gäller hantering av vissa datatyper och ovanliga åtgärder.
Konvertera strängliteraler till datetime2
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 datatypen datetime2 .
| Indatasträngliteral | datetime2(n) |
|---|---|
ODBC DATE |
ODBC-stränglitaraler mappas till datatypen datetime . Tilldelningsåtgärder från ODBC DATETIME literaler till datetime2-typer orsakar en implicit konvertering mellan datetime och den här typen enligt definitionen i konverteringsreglerna. |
ODBC TIME |
Se föregående ODBC DATE regel. |
ODBC DATETIME |
Se föregående ODBC DATE regel. |
DATE bara |
Delen TIME är 00:00:00som standard . |
TIME bara |
Delen DATE är 1900-01-01som standard . |
TIMEZONE bara |
Standardvärden anges. |
DATE + TIME |
Trivial. |
DATE + TIMEZONE |
Not allowed. |
TIME + TIMEZONE |
Delen DATE är som standard 1900-1-1.
TIMEZONE indata ignoreras. |
DATE + TIME + TIMEZONE |
Den lokala DATETIME används. |
Examples
I följande exempel jämförs resultatet av gjutning av en sträng med varje datum och tid datatyp.
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';
Här är resultatet.
| Data type | 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 |