Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Definuje datum, které je v kombinaci s časem dne založeném na 24hodinovém formátu. datetime2 lze považovat za rozšíření existujícího typu datetime , který má větší rozsah kalendářních dat, větší výchozí desetinnou přesnost a volitelnou přesnost určenou uživatelem.
Popis datetime2
| Property | Value |
|---|---|
| Syntax | datetime2 [ (přesnost desetinné sekundy) ] |
| Usage | DECLARE @MyDatetime2 datetime2(7);CREATE TABLE Table1 (Column1 datetime2(7)); |
| Výchozí formát řetězcového literálu (používá se pro klienta nižší úrovně) |
yyyy-MM-dd HH:mm:ss[.nnnnnnn]Další informace naleznete v části Zpětná kompatibilita pro klienty nižší úrovně dále v tomto článku. |
| Rozsah kalendářních dat |
0001-01-01 prostřednictvím 9999-12-311. ledna 1 až 31. prosince 9999 CE |
| Časový rozsah |
00:00:00 prostřednictvím 23:59:59.9999999 |
| Rozsah posunu časového pásma | None |
| Rozsahy prvků |
yyyy je čtyřciferné číslo v rozsahu od 0001 roku 9999, který představuje rok.MM je dvouciferné číslo v rozsahu od 01 do 12, který představuje měsíc v zadaném roce.dd je dvouciferné číslo v závislosti 01 na 31 měsíci, které představuje den zadaného měsíce.HH je dvouciferné číslo v rozsahu od 00 do 23, který představuje hodinu.mm je dvouciferné číslo v rozsahu od 00 do 59, který představuje minutu.ss je dvouciferné číslo v rozsahu od 00 do 59, který představuje sekundu.n* je číslice od do sedmimístného čísla 09999999, které představuje desetinné sekundy. V Informatica jsou desetinné sekundy zkráceny, pokud n je menší než 3. |
| Délka postavy | 19 pozic minimálně (yyyy-MM-dd HH:mm:ss) až 27 maximum (yyyy-MM-dd HH:mm:ss.0000000) |
| Přesnost, měřítko | 0 až 7 číslic s přesností 100 nanosekund (100 ns). Výchozí přesnost je 7 číslic. V Microsoft Fabric Data Warehouse může být tato přesnost celé číslo od 0 do 6 bez výchozího nastavení. Přesnost musí být zadána v datovém skladu Microsoft Fabric. |
| Velikost úložiště 1 | 6 bajtů pro přesnost menší než 3. 7 bajtů pro přesnost 3 nebo 4. Všechny ostatní přesnosti vyžadují 8 bajtů. 2 |
| Accuracy | 100 nanosekund |
| Výchozí hodnota | 1900-01-01 00:00:00 |
| Calendar | Gregorian |
| Přesnost desetinné sekundy definované uživatelem | Yes |
| Informace o posunu časových pásem a zachování | No |
| Informace o letním letním času | No |
1 Zadané hodnoty jsou pro nekomprimované úložiště řádků. Použití komprese dat nebo columnstore může změnit velikost úložiště pro každou přesnost. Velikost úložiště na disku a v paměti se navíc může lišit. Například hodnoty datetime2 vždy vyžadují 8 bajtů v paměti při použití dávkového režimu.
2 Když je hodnota datetime2 přetypována na varbinární hodnotu, přidá se k hodnotě varbinary extra bajt k uložení přesnosti.
Metadata datového typu naleznete v části sys.systypes nebo TYPEPROPERTY. Přesnost a měřítko jsou proměnné pro některé datové typy data a času. Pokud chcete získat přesnost a měřítko sloupce, přečtěte si téma COLUMNPROPERTY, COL_LENGTH nebo sys.columns.
Podporované formáty řetězcového literálu pro datetime2
Následující tabulky uvádějí podporované formáty literálů ISO 8601 a ODBC pro datum a čas2. Informace o abecedním, číselném, nepopsaného formátu a formátu času pro části data a času data a času 2 najdete v tématu datum a čas.
| ISO 8601 | Descriptions |
|---|---|
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] |
Tento formát není ovlivněn SET LANGUAGE nastavením národního prostředí a SET DATEFORMAT relace. , Tdvojtečky (:) a tečka (.) jsou zahrnuty do řetězcového literálu, například 2024-05-02T19:58:47.1234567. |
| rozhraní ODBC | Description |
|---|---|
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } |
Specifické pro rozhraní ODBC API: Počet číslic napravo od desetinné čárky, která představuje desetinnou čárku, lze zadat od 0 do 7 (100 nanosekund). |
DODRŽOVÁNÍ PŘEDPISŮ ANSI a ISO 8601
Dodržování předpisů ANSI a ISO 8601 pro datum a čas platí pro datetime2.
Zpětná kompatibilita pro klienty nižší úrovně
Někteří klienti nižší úrovně nepodporují datové typy time, date, datetime2 a datetimeoffset. Následující tabulka ukazuje mapování typů mezi instancí SQL Serveru na vyšší úrovni a klienty nižší úrovně.
| Datový typ SQL Serveru | Výchozí formát literálu řetězce předaný klientovi nižší úrovně | Rozhraní ODBC nižší úrovně | OLEDB nižší úrovně | JDBC nižší úrovně | SQLCLIENT nižší úrovně |
|---|---|---|---|---|---|
| time | HH:mm:ss[.nnnnnnn] | SQL_WVARCHAR nebo SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Řetězec nebo SqString |
| date | yyyy-MM-dd | SQL_WVARCHAR nebo SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Řetězec nebo SqString |
| datetime2 | yyyy-MM-dd HH:mm:ss[.nnnnnnn] | SQL_WVARCHAR nebo SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Řetězec nebo SqString |
| datetimeoffset | yyyy-MM-dd HH:mm:ss[.nnnnnnnn] [+|-]hh:mm | SQL_WVARCHAR nebo SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Řetězec nebo SqString |
Převod dat data a času
Při převodu na datové typy data a času databázový stroj odmítne všechny hodnoty, které nedokáže rozpoznat jako kalendářní data nebo časy. Informace o použití funkcí CAST a CONVERT s daty data a času naleznete v tématu CAST a CONVERT
Převod jiných typů data a času na datový typ datetime2
Tato část popisuje, co se stane, když se jiné datové typy data a času převedou na datový typ datetime2 .
Při převodu z datase zkopíruje rok, měsíc a den. Časová komponenta je nastavena na 00:00:00.0000000. Následující kód ukazuje výsledky převodu hodnoty date na hodnotu datetime2.
DECLARE @date AS DATE = '12-21-16';
DECLARE @datetime2 AS DATETIME2 = @date;
SELECT @datetime2 AS '@datetime2',
@date AS '@date';
Tady je soubor výsledků.
@datetime2 @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21
Při převodu z času(n) se zkopíruje časová komponenta a komponenta data je nastavena na 1900-01-01hodnotu . Následující příklad ukazuje výsledky převodu hodnoty time(7) na hodnotu datetime2 .
DECLARE @time AS TIME (7) = '12:10:16.1234567';
DECLARE @datetime2 AS DATETIME2 = @time;
SELECT @datetime2 AS '@datetime2',
@time AS '@time';
Tady je soubor výsledků.
@datetime2 @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567
Pokud je převod z smalldatetime, hodiny a minuty se zkopírují. Sekundy a zlomkové sekundy jsou nastaveny na 0. Následující kód ukazuje výsledky převodu hodnoty smalldatetime na hodnotu datetime2.
DECLARE @smalldatetime AS SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime2 AS DATETIME2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2',
@smalldatetime AS '@smalldatetime';
Tady je soubor výsledků.
@datetime2 @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
Při převodu z datetimeoffset(n) se zkopírují komponenty data a času. Časové pásmo je zkráceno. Následující příklad ukazuje výsledky převodu datetimeoffset(7) hodnoty na datetime2 hodnotu.
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';
Tady je soubor výsledků.
@datetime2 @datetimeoffset
--------------------------- ----------------------------------
2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00
Při převodu z data a času se datum a čas zkopírují. Desetinná přesnost je rozšířena na 7 číslic. Následující příklad ukazuje výsledky převodu datetime hodnoty na datetime2 hodnotu.
DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';
DECLARE @datetime2 AS DATETIME2 = @datetime;
SELECT @datetime2 AS '@datetime2',
@datetime AS '@datetime';
Tady je soubor výsledků.
@datetime2 @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
Explicitní přetypování na datetime2 při použití datetime
V rámci úrovně kompatibility databáze 130 a vyšší se implicitní převody datových typů datetime na datetime2 zobrazují vyšší přesnost díky tomu, že se započítávání desetinných milisekund, což vede k různým převedeným hodnotám, jak je vidět v předchozím příkladu. Explicitní přetypování na datový typ datetime2 použijte vždy, když existuje smíšený scénář porovnání mezi datovými typy datetime a datetime2 . Další informace najdete v tématu Vylepšení SQL Serveru a Azure SQL Database při zpracování některých datových typů a neobvyklých operací.
Převod řetězcových literálů na datetime2
Převody z řetězcových literálů na typy data a času jsou povoleny, pokud jsou všechny části řetězců v platných formátech. V opačném případě se vyvolá chyba modulu runtime. Implicitní převody nebo explicitní převody, které nezadávají styl, od typů data a času po řetězcové literály jsou ve výchozím formátu aktuální relace. Následující tabulka uvádí pravidla pro převod řetězcového literálu na datový typ datetime2 .
| Literál vstupního řetězce | datetime2(n) |
|---|---|
ODBC DATE |
Řetězcové literály ODBC se mapují na datový typ datetime . Jakákoli operace přiřazení z ODBC DATETIME literálů do typů datetime2 způsobí implicitní převod mezi datetime a tímto typem definovaným pravidly převodu. |
ODBC TIME |
Viz předchozí ODBC DATE pravidlo. |
ODBC DATETIME |
Viz předchozí ODBC DATE pravidlo. |
DATE pouze |
Výchozí hodnota TIME části 00:00:00je . |
TIME pouze |
Výchozí hodnota DATE části 1900-01-01je . |
TIMEZONE pouze |
Zadají se výchozí hodnoty. |
DATE + TIME |
Triviální. |
DATE + TIMEZONE |
Nepovoleno. |
TIME + TIMEZONE |
Výchozí hodnota DATE části je 1900-1-1.
TIMEZONE vstup je ignorován. |
DATE + TIME + TIMEZONE |
Použije se místní DATETIME . |
Examples
Následující příklad porovnává výsledky přetypování řetězce k jednotlivým kalendářním a času datového typu.
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';
Tady je soubor výsledků.
| Datový typ | 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 |