Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Definiuje datę połączoną z godziną dnia opartą na zegarze 24-godzinnym. datetime2 można uznać za rozszerzenie istniejącego typu daty/godziny , który ma większy zakres dat, większą domyślną precyzję ułamkową i opcjonalną precyzję określoną przez użytkownika.
Opis datetime2
| Property | Value |
|---|---|
| Syntax | datetime2 [ (precyzja ułamkowa sekund) ] |
| Usage | DECLARE @MyDatetime2 datetime2(7);CREATE TABLE Table1 (Column1 datetime2(7)); |
| Domyślny format literału ciągu (używane w przypadku klienta na poziomie podrzędnym) |
yyyy-MM-dd HH:mm:ss[.nnnnnnn]Aby uzyskać więcej informacji, zobacz Zgodność z poprzednimi wersjami dla klientów na poziomie starszym w dalszej części tego artykułu. |
| Zakres dat |
0001-01-01 za pośrednictwem 9999-12-311 stycznia 1 CE do 31 grudnia 9999 CE |
| Zakres czasu |
00:00:00 za pośrednictwem 23:59:59.9999999 |
| Zakres przesunięcia strefy czasowej | None |
| Zakresy pierwiastków |
yyyy jest 4-cyfrową liczbą, od 0001 do 9999, która reprezentuje rok.MM jest dwucyfrową liczbą z zakresu od 01 do 12, która reprezentuje miesiąc w określonym roku.ddto dwucyfrowa liczba, od do 01 w zależności od 31 miesiąca, który reprezentuje dzień określonego miesiąca.HH jest dwucyfrową liczbą z zakresu od 00 do 23, która reprezentuje godzinę.mm jest dwucyfrową liczbą z zakresu od 00 do 59, która reprezentuje minutę.ss jest dwucyfrową liczbą z zakresu od 00 do 59, która reprezentuje drugą.n* jest liczbą zero-do siedmiu cyfr z 0 do 9999999, która reprezentuje sekundy ułamkowe. W informatica ułamkowe sekundy są obcinane, gdy n jest mniejsze niż 3. |
| Długość postaci | Minimum 19 pozycji (yyyy-MM-dd HH:mm:ss) do 27 maksymalnych (yyyy-MM-dd HH:mm:ss.0000000) |
| Precyzja, skala | Od 0 do 7 cyfr z dokładnością 100 nanosekund (100 ns). Domyślna precyzja to 7 cyfr. W usłudze Microsoft Fabric Data Warehouse ta precyzja może być liczbą całkowitą z zakresu od 0 do 6, bez wartości domyślnej. Precyzja musi być określona w usłudze Microsoft Fabric Data Warehouse. |
| Rozmiar magazynu 1 | 6 bajtów dla precyzji mniejszej niż 3. 7 bajtów dla precyzji 3 lub 4. Cała inna precyzja wymaga 8 bajtów. 2 |
| Accuracy | 100 nanosekund |
| Wartość domyślna | 1900-01-01 00:00:00 |
| Calendar | Gregorian |
| Precyzja ułamkowa zdefiniowana przez użytkownika | Yes |
| Rozpoznawanie i zachowywanie przesunięcia strefy czasowej | No |
| Uwzględnianie światła dziennego | No |
1 Podane wartości są przeznaczone dla nieskompresowanego magazynu wierszy. Użycie kompresji danych lub magazynu kolumn może zmienić rozmiar magazynu dla każdej precyzji. Ponadto rozmiar magazynu na dysku i w pamięci może się różnić. Na przykład wartości datetime2 zawsze wymagają 8 bajtów w pamięci, gdy jest używany tryb wsadowy.
2 Gdy wartość datetime2 jest rzutowany na wartość varbinary , dodatkowy bajt jest dodawany do wartości varbinary w celu przechowywania dokładności.
Aby uzyskać metadane typu danych, zobacz sys.systypes lub TYPEPROPERTY. Precyzja i skala to zmienna dla niektórych typów danych daty i godziny. Aby uzyskać precyzję i skalę dla kolumny, zobacz COLUMNPROPERTY, COL_LENGTH lub sys.columns.
Obsługiwane formaty literałów ciągu dla daty/godziny2
W poniższych tabelach wymieniono obsługiwane formaty literałów ciągu ISO 8601 i ODBC dla daty/godziny2. Aby uzyskać informacje o formatach alfabetycznych, liczbowych, niesepatycznych i godzinowych dla części daty i godziny daty/godziny 2, zobacz data i godzina.
| ISO 8601 | Descriptions |
|---|---|
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] |
Ten format nie ma wpływu na SET LANGUAGE ustawienia regionalne i SET DATEFORMAT sesji. Dwukropki T(:) i kropka (.) są uwzględniane w literału ciągu, na przykład 2024-05-02T19:58:47.1234567. |
| ODBC | Description |
|---|---|
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } |
Specyficzne dla interfejsu API ODBC: Liczba cyfr z prawej strony punktu dziesiętnego, który reprezentuje sekundy ułamkowe, można określić z zakresu od 0 do 7 (100 nanosekund). |
Zgodność ze standardami ANSI i ISO 8601
Zgodność usług ANSI i ISO 8601 daty i godziny ma zastosowanie do daty/godziny2.
Zgodność z poprzednimi wersjami dla klientów na poziomie starszym
Niektórzy klienci na poziomie podrzędnym nie obsługują typów danych data, data, data/godzina2 i data/godzina/godzina.. W poniższej tabeli przedstawiono mapowanie typów między wystąpieniem najwyższego poziomu programu SQL Server a klientami na poziomie podrzędnym.
| Typ danych programu SQL Server | Domyślny format literału ciągu przekazywany do klienta na poziomie podrzędnym | OdBC na poziomie dół | OLEDB na poziomie dół | JDBC na poziomie w dół | Program SQLCLIENT na poziomie podrzędnym |
|---|---|---|---|---|---|
| time | HH:mm:ss[.nnnnnnn] | SQL_WVARCHAR lub SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Ciąg lub ciąg sqstring |
| date | yyyy-MM-dd | SQL_WVARCHAR lub SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Ciąg lub ciąg sqstring |
| datetime2 | rrrr-MM-dd HH:mm:ss[.nnnnnnnnn] | SQL_WVARCHAR lub SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Ciąg lub ciąg sqstring |
| datetimeoffset | rrrr-MM-dd HH:mm:ss[.nnnnnnnnn] [+|-]hh:mm | SQL_WVARCHAR lub SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Ciąg lub ciąg sqstring |
Konwertowanie danych daty i godziny
Podczas konwertowania na typy danych daty i godziny aparat bazy danych odrzuca wszystkie wartości, których nie może rozpoznać jako daty lub godziny. Aby uzyskać informacje o korzystaniu z funkcji CAST i CONVERT z danymi daty i godziny, zobacz CAST and CONVERT
Konwertowanie innych typów dat i godzin na typ danych datetime2
W tej sekcji opisano, co się dzieje, gdy inne typy danych daty i godziny są konwertowane na typ danych datetime2 .
Gdy konwersja pochodzi z daty , jest kopiowany rok, miesiąc i dzień. Składnik czasu jest ustawiony na 00:00:00.0000000. Poniższy kod przedstawia wyniki konwertowania wartości date na wartość datetime2.
DECLARE @date AS DATE = '12-21-16';
DECLARE @datetime2 AS DATETIME2 = @date;
SELECT @datetime2 AS '@datetime2',
@date AS '@date';
Oto zestaw wyników.
@datetime2 @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21
Gdy konwersja pochodzi z godziny (n), składnik godziny jest kopiowany, a składnik daty jest ustawiony na 1900-01-01wartość . Poniższy przykład przedstawia wyniki konwertowania wartości time(7) na wartość datetime2 .
DECLARE @time AS TIME (7) = '12:10:16.1234567';
DECLARE @datetime2 AS DATETIME2 = @time;
SELECT @datetime2 AS '@datetime2',
@time AS '@time';
Oto zestaw wyników.
@datetime2 @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567
Gdy konwersja pochodzi z smalldatetime, godziny i minuty są kopiowane. Sekundy i sekundy ułamkowe są ustawione na 0. Poniższy kod przedstawia wyniki konwertowania wartości smalldatetime na wartość datetime2.
DECLARE @smalldatetime AS SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime2 AS DATETIME2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2',
@smalldatetime AS '@smalldatetime';
Oto zestaw wyników.
@datetime2 @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
Gdy konwersja pochodzi z elementu datetimeoffset(n), składniki daty i godziny są kopiowane. Strefa czasowa jest obcięta. W poniższym przykładzie przedstawiono wyniki konwertowania wartości datetimeoffset(7) na wartość datetime2.
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';
Oto zestaw wyników.
@datetime2 @datetimeoffset
--------------------------- ----------------------------------
2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00
Gdy konwersja pochodzi z daty/godziny, data i godzina są kopiowane. Precyzja ułamkowa jest rozszerzana na 7 cyfr. W poniższym przykładzie przedstawiono wyniki konwertowania wartości datetime na wartość datetime2.
DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';
DECLARE @datetime2 AS DATETIME2 = @datetime;
SELECT @datetime2 AS '@datetime2',
@datetime AS '@datetime';
Oto zestaw wyników.
@datetime2 @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
Jawne rzutowanie do daty/godziny2 podczas korzystania z daty/godziny
W obszarze Poziom zgodności bazy danych 130 i nowszych niejawne konwersje z typów danych datetimedo datetime2 pokazują lepszą dokładność, uwzględniając ułamkowe milisekundy, co powoduje różne przekonwertowane wartości, jak pokazano w poprzednim przykładzie. Użyj jawnego rzutowania do typu danych datetime2 za każdym razem, gdy istnieje scenariusz porównania mieszanego między typami danych datetime i datetime2 . Aby uzyskać więcej informacji, zobacz ulepszenia programu SQL Server i usługi Azure SQL Database w zakresie obsługi niektórych typów danych i nietypowych operacji.
Konwertowanie literałów ciągu na wartość datetime2
Konwersje z literałów ciągów do typów daty i godziny są dozwolone, jeśli wszystkie części ciągów są w prawidłowych formatach. W przeciwnym razie zostanie zgłoszony błąd środowiska uruchomieniowego. Niejawne konwersje lub jawne konwersje, które nie określają stylu, od typów daty i godziny do literałów ciągu są w domyślnym formacie bieżącej sesji. W poniższej tabeli przedstawiono reguły konwertowania literału ciągu na typ danych datetime2 .
| Literał ciągu wejściowego | datetime2(n) |
|---|---|
ODBC DATE |
Literały ciągu ODBC są mapowane na typ danych typu data/godzina . Każda operacja przypisania z ODBC DATETIME literałów do typów datetime2 powoduje niejawną konwersję między datą/godziną a tym typem zdefiniowanym przez reguły konwersji. |
ODBC TIME |
Zobacz poprzednią ODBC DATE regułę. |
ODBC DATETIME |
Zobacz poprzednią ODBC DATE regułę. |
DATE tylko |
Część jest domyślnie ustawiona TIME na 00:00:00. |
TIME tylko |
Część jest domyślnie ustawiona DATE na 1900-01-01. |
TIMEZONE tylko |
Podano wartości domyślne. |
DATE + TIME |
Błahy. |
DATE + TIMEZONE |
Niedozwolone. |
TIME + TIMEZONE |
Część domyślna DATE to 1900-1-1.
TIMEZONE dane wejściowe są ignorowane. |
DATE + TIME + TIMEZONE |
Używany jest lokalny DATETIME . |
Examples
Poniższy przykład porównuje wyniki rzutowania ciągu do każdej daty i godziny typu danych.
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';
Oto zestaw wyników.
| Typ danych | 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 |