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ę w programie SQL Server. Typ danych daty został wprowadzony w programie SQL Server 2008 (10.0.x).
Opis daty
| Property | Value |
|---|---|
| Syntax | DATE |
| Usage | DECLARE @MyDate DATECREATE TABLE Table1 (Column1 DATE) |
| Domyślny format literału ciągu (używane w przypadku klienta na poziomie podrzędnym) |
yyyy-MM-ddAby uzyskać więcej informacji, zobacz sekcję Zgodność z poprzednimi wersjami dla klientów na poziomie starszym . |
| Range |
0001-01-01przez (9999-12-31 przez 1582-10-159999-12-31 dla Informatica)1 stycznia 1 CE (wspólna era) do 31 grudnia 9999 CE (15 października 1582 CE do 31 grudnia 9999 CE dla Informatica) |
| Zakresy pierwiastków |
yyyy to cztery cyfry z 0001 do 9999 reprezentujące rok. Informatica ogranicza yyyy zakres 1582 do 9999.MM to dwie cyfry z 01 do 12 , które reprezentują miesiąc w określonym roku.ddto dwie cyfry z do 01, w zależności od 31 miesiąca, który reprezentuje dzień określonego miesiąca. |
| Długość postaci | 10 pozycji |
| Precyzja, skala | 10, 0 |
| Rozmiar magazynu | 3 bajty, stałe |
| Struktura magazynu | jedna liczba całkowita 3-bajtowa przechowuje datę |
| Accuracy | Jeden dzień |
| Wartość domyślna | 1900-01-01Ta wartość jest używana dla dołączonej części daty dla niejawnej konwersji z godziny na datetime2 lub datetimeoffset. |
| Calendar | Gregorian |
| Precyzja ułamkowa zdefiniowana przez użytkownika | No |
| Rozpoznawanie i zachowywanie przesunięcia strefy czasowej | No |
| Uwzględnianie światła dziennego | No |
Obsługiwane formaty literału ciągu dla daty
Na poniższych listach przedstawiono prawidłowe formaty literału ciągu dla typu danych daty .
[m]m, ddi [yy]yy reprezentują miesiąc, dzień i rok w ciągu z ukośnikami (/), łącznikami () lub kropkami (-.) jako separatorami.
Obsługiwane są tylko cztery cyfry lub dwa cyfry lat. Używaj czterocyfrowych lat, jeśli jest to możliwe. Aby określić liczbę całkowitą z 0001 , 9999 która reprezentuje rok odcięcia do interpretowania dwóch cyfr lat jako cztery cyfry lat, użyj opcji konfiguracji serwera odcinania dwucyfrowego roku .
Dla informatica jest yyyy ograniczony do zakresu 1582 do 9999.
Dwucyfrowy rok, który jest mniejszy lub równy ostatnim dwóm cyfrom roku odcięcia, jest w tym samym stuleciu co rok odcięcia. Dwucyfrowy rok większy niż ostatnie dwie cyfry roku odcięcia jest w wieku, który następuje przed rokiem odcięcia. Jeśli na przykład dwucyfrowe odcięcie roku jest wartością domyślną 2049, dwucyfrowy rok 49 jest interpretowany jako 2049 i dwucyfrowy rok 50 jest interpretowany jako 1950.
Bieżące ustawienie języka określa domyślny format daty. Format daty można zmienić przy użyciu instrukcji SET LANGUAGE i SET DATEFORMAT .
Format ydm nie jest obsługiwany dla daty.
Formaty literałów ciągu dla roku miesięcznego
SET DATEFORMAT mdy;
[m]m/dd/[yy]yy[m]m-dd-[yy]yy
Formaty literału ciągu dla dni miesiąca
SET DATEFORMAT myd;
[m]m/[yy]yy/dd[m]m-[yy]yy-dd[m]m.[yy]yy.dd
Formaty literałów ciągu dla dni-miesiąc-rok
SET DATEFORMAT dmy;
dd/[m]m/[yy]yydd-[m]m-[yy]yydd.[m]m.[yy]yy
Formaty literałów ciągu dla miesiąca dziennego
SET DATEFORMAT dym;
dd/[yy]yy/[m]mdd-[yy]yy-[m]mdd.[yy]yy.[m]m
Formaty literału ciągu dla dni miesiąca
SET DATEFORMAT ymd;
[yy]yy/[m]m/dd[yy]yy-[m]m-dd[yy]yy-[m]m-dd
Alfabetyczna lista formatów
[dd] mon[,] yyyydd mon[,][yy]yydd [yy]yy mon[dd] yyyy monmon [dd][,] yyyymon dd[,] [yy]mon yyyy [dd]yyyy mon [dd]yyyy [dd] mon
mon reprezentuje pełną nazwę miesiąca lub skrót miesiąca podany w bieżącym języku. Przecinki są opcjonalne, a wielkie litery są ignorowane.
Aby uniknąć niejednoznaczności, użyj czterech cyfr lat.
Jeśli brakuje dnia, pierwszy dzień miesiąca jest dostarczany.
Lista formatów ISO 8601
yyyy-MM-ddyyyyMMdd
Tak samo jak w przypadku standardu SQL. Ten format jest jedynym formatem zdefiniowanym jako międzynarodowy standard.
Nieseparowana lista formatów
[yy]yyMMddyyyy[MMdd]
Dane daty można określić z czterema, sześcioma lub ośmioma cyframi. Ciąg sześciocyfrowy lub ośmiocyfrowy jest zawsze interpretowany jako ymd. Miesiąc i dzień muszą być zawsze dwiema cyframi. Czterocyfrowy ciąg jest interpretowany jako rok.
Format daty ODBC
{ d 'yyyy-MM-dd' }
Specyficzne dla interfejsu API ODBC.
Format daty XML W3C
yyyy-MM-ddTZD
Obsługiwane w przypadku użycia kodu XML/SOAP.
TZD jest projektantem strefy czasowej (Z lub +hh:mm-hh:mm):
hh:mmreprezentuje przesunięcie strefy czasowej.hhto dwie cyfry, od0do14, które reprezentują liczbę godzin przesunięcia strefy czasowej.mmto dwie cyfry z zakresu od0do59, które reprezentują liczbę dodatkowych minut przesunięcia strefy czasowej.+(plus) lub-(minus) jest obowiązkowym znakiem przesunięcia strefy czasowej. Ten znak wskazuje, że w celu uzyskania czasu lokalnego przesunięcie strefy czasowej jest dodawane lub odejmowane z godziny uniwersalnej koordynowanej (UTC). Prawidłowy zakres przesunięcia strefy czasowej wynosi od-14:00do+14:00.
Zgodność ze standardami ANSI i ISO 8601
data jest zgodna ze standardową definicją ANSI SQL dla kalendarza gregoriańskiego:
Typy danych daty/godziny umożliwiają przechowywanie dat w formacie gregoriańskim w zakresie dat 0001-01-01 CE do 9999-12-31 CE.
Domyślny format literału ciągu, który jest używany dla klientów na poziomie podrzędnym, jest zgodny ze standardowym formularzem SQL zdefiniowanym jako yyyy-MM-dd. Ten format jest taki sam jak definicja ISO 8601 dla programu DATE.
Note
Dla Informatica zakres jest ograniczony do 1582-10-15 (15 października 1582 CE) do 9999-12-31 (31 grudnia 9999 CE).
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_WSTR lub DBTYPE_STR |
Java.sql.String |
String lub SqString |
| date | yyyy-MM-dd |
SQL_WVARCHAR lub SQL_VARCHAR |
DBTYPE_WSTR lub DBTYPE_STR |
Java.sql.String |
String lub SqString |
| datetime2 | yyyy-MM-dd HH:mm:ss[.nnnnnnn] |
SQL_WVARCHAR lub SQL_VARCHAR |
DBTYPE_WSTR lub DBTYPE_STR |
Java.sql.String |
String lub SqString |
| datetimeoffset | yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm |
SQL_WVARCHAR lub SQL_VARCHAR |
DBTYPE_WSTR lub DBTYPE_STR |
Java.sql.String |
String lub SqString |
Konwertowanie danych daty i godziny
Podczas konwertowania na typy danych daty i godziny program SQL Server odrzuca wszystkie wartości, które nie są rozpoznawane jako daty ani godziny. Aby uzyskać informacje o korzystaniu z funkcji CAST i CONVERT z danymi daty i godziny, zobacz CAST i CONVERT.
Konwertowanie daty na inne typy dat i godzin
W tej sekcji opisano, co się dzieje po przekonwertowaniu typu danych daty na inne typy danych daty i godziny.
Gdy konwersja ma wartość time(n), konwersja nie powiedzie się i zostanie zgłoszony komunikat o błędzie 206:
Starcie typu operandu: data jest niezgodna z godziną.
Jeśli konwersja to data/godzina, składnik daty zostanie skopiowany. Poniższy kod przedstawia wyniki konwertowania wartości daty na wartość typu data/godzina.
DECLARE @date AS DATE = '12-10-25';
DECLARE @datetime AS DATETIME = @date;
SELECT @date AS '@date',
@datetime AS '@datetime';
Oto zestaw wyników.
@date @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000
Gdy konwersja ma wartość smalldatetime, wartość daty znajduje się w zakresie parametru smalldatetime, składnik daty jest kopiowany, a składnik godziny jest ustawiony na 00:00:00.000wartość . Gdy wartość daty znajduje się poza zakresem wartości smalldatetime , jest zgłaszany komunikat o błędzie 242, a wartość smalldatetime jest ustawiona na NULL:
Konwersja typu danych daty na typy danych smalldatetime spowodowała powstanie wartości poza zakresem.
Poniższy kod przedstawia wyniki konwertowania wartości daty na wartość smalldatetime .
DECLARE @date AS DATE = '1912-10-25';
DECLARE @smalldatetime AS SMALLDATETIME = @date;
SELECT @date AS '@date',
@smalldatetime AS '@smalldatetime';
Oto zestaw wyników.
@date @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00
W przypadku konwersji na datetimeoffset(n), data jest kopiowana, a godzina jest ustawiona na 00:00.0000000 +00:00. Poniższy kod przedstawia wyniki konwertowania wartości daty na wartość datetimeoffset(3).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;
SELECT @date AS '@date',
@datetimeoffset AS '@datetimeoffset';
Oto zestaw wyników.
@date @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00
Gdy konwersja ma wartość datetime2(n), składnik daty jest kopiowany, a składnik godziny jest ustawiony na 00:00.000000wartość . Poniższy kod przedstawia wyniki konwertowania wartości daty na wartość datetime2(3).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetime2 AS DATETIME2 (3) = @date;
SELECT @date AS '@date',
@datetime2 AS '@datetime2(3)';
Oto zestaw wyników.
@date @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000
Konwertowanie literałów ciągu na datę
Konwersje z literałów ciągów do typów daty i godziny są dozwolone, jeśli wszystkie części ciągów mają prawidłowe formaty. 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 daty .
| Literał ciągu wejściowego | date |
|---|---|
| DATA ODBC | Literały ciągu ODBC są mapowane na typ danych typu data/godzina . Każda operacja przypisania z literałów ODBC DATETIME do typu daty powoduje niejawną konwersję między datą/godziną a typem zdefiniowanym przez reguły konwersji. |
| CZAS ODBC | Zobacz poprzednią regułę ODBC DATE. |
| ODBC DATETIME | Zobacz poprzednią regułę ODBC DATE. |
| Tylko DATE | Trivial |
| TYLKO CZAS | Podano wartości domyślne. |
| Tylko TIMEZONE | Podano wartości domyślne. |
| DATA I GODZINA | Używana jest część DATE ciągu wejściowego. |
| DATA I STREFA CZASOWA | Niedozwolone. |
| CZAS + STREFA CZASOWA | Podano wartości domyślne. |
| DATA + GODZINA + STREFA CZASOWA | Używana jest część DATE (DATA) lokalnego elementu DATETIME. |
Examples
Poniższy przykład porównuje wyniki rzutowania ciągu do każdego typu danych daty i godziny.
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';
Oto zestaw wyników.
| Typ danych | 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 |