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 v SQL Serveru. Datový typ data byl zaveden v SYSTÉMU SQL Server 2008 (10.0.x).
Popis data
| Property | Value |
|---|---|
| Syntax | DATE |
| Usage | DECLARE @MyDate DATECREATE TABLE Table1 (Column1 DATE) |
| Výchozí formát řetězcového literálu (používá se pro klienta nižší úrovně) |
yyyy-MM-ddDalší informace najdete v části Zpětná kompatibilita klientů nižší úrovně . |
| Range |
0001-01-01prostřednictvím (9999-12-31 prostřednictvím 1582-10-159999-12-31 pro Informatica)1. ledna 1 CE (společná éra) do 31. prosince 9999 CE (15. října 1582 CE až 31. prosince 9999 CE pro Informatica) |
| Rozsahy prvků |
yyyy je čtyři číslice od 0001 roku 9999 , která představují rok. Informatica omezuje yyyy rozsah 1582 na 9999.MM je dvě číslice od 01 té 12 , která představují měsíc v zadaném roce.dd je dvě číslice od 01 do 31, v závislosti na měsíci, který představuje den zadaného měsíce. |
| Délka postavy | 10 pozic |
| Přesnost, měřítko | 10, 0 |
| Velikost úložiště | 3 bajty, pevné |
| Struktura úložiště | Jedno 3 bajtové celé číslo ukládá datum |
| Accuracy | Jeden den |
| Výchozí hodnota | 1900-01-01Tato hodnota se používá pro připojenou část data pro implicitní převod z času na datetime2 nebo datetimeoffset. |
| Calendar | Gregorian |
| Přesnost desetinné sekundy definované uživatelem | No |
| Informace o posunu časových pásem a zachování | No |
| Informace o letním letním času | No |
Podporované formáty řetězcového literálu pro datum
Následující seznamy zobrazují platné formáty řetězcového literálu pro datový typ kalendářního data .
[m]m, dda [yy]yy představuje měsíc, den a rok v řetězci se značkami lomítka (/), spojovníky (-) nebo tečkami (.) jako oddělovači.
Podporují se pouze čtyři nebo dvouciferné roky. Pokud je to možné, používejte čtyři číslice roky. Chcete-li zadat celé číslo od 0001 do 9999 , které představuje rok pro odříznutí pro interpretaci dvouciferných roků jako čtyřmístných let, použijte možnost konfigurace dvouciferného serveru .
Pro Informatica, yyyy je omezena na rozsah 1582 až 9999.
Dvouciferný rok, který je menší nebo roven posledním dvěma číslicemi v roce odříznutí, je ve stejném století jako odříznutý rok. Dvouciferný rok větší než poslední dvě číslice roku odříznutí je ve století, které přichází před odříznutým rokem. Pokud je například dvouciferný výřez roku výchozí 2049, je dvouciferný rok interpretován jako 49 dvoumístný rok 2049 a dvouciferný rok 50 je interpretován jako 1950.
Aktuální nastavení jazyka určuje výchozí formát data. Formát data můžete změnit pomocí příkazů SET LANGUAGE a SET DATEFORMAT .
Formát ydm není pro datum podporovaný.
Formáty řetězcového literálu pro měsíc-den-rok
SET DATEFORMAT mdy;
[m]m/dd/[yy]yy[m]m-dd-[yy]yy
Formáty řetězcového literálu pro měsíc-rok-den
SET DATEFORMAT myd;
[m]m/[yy]yy/dd[m]m-[yy]yy-dd[m]m.[yy]yy.dd
Formáty řetězcového literálu pro den-měsíc-rok
SET DATEFORMAT dmy;
dd/[m]m/[yy]yydd-[m]m-[yy]yydd.[m]m.[yy]yy
Formáty řetězcového literálu pro den-rok-měsíc
SET DATEFORMAT dym;
dd/[yy]yy/[m]mdd-[yy]yy-[m]mdd.[yy]yy.[m]m
Formáty řetězcového literálu pro rok-měsíc-den
SET DATEFORMAT ymd;
[yy]yy/[m]m/dd[yy]yy-[m]m-dd[yy]yy-[m]m-dd
Abecední seznam formátů
[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 představuje úplný název měsíce nebo zkratku měsíce zadanou v aktuálním jazyce. Čárky jsou volitelné a velká písmena se ignorují.
Abyste se vyhnuli nejednoznačnosti, použijte čtyři číslice let.
Pokud den chybí, zobrazí se první den v měsíci.
Seznam formátů ISO 8601
yyyy-MM-ddyyyyMMdd
Stejné jako standard SQL. Tento formát je jediným formátem definovaným jako mezinárodní standard.
Neformátovaný seznam formátů
[yy]yyMMddyyyy[MMdd]
Data data lze zadat čtyřmi, šesti nebo osmi číslicemi. Šestimístný nebo osmimístný řetězec se vždy interpretuje jako ymd. Měsíc a den musí být vždy dvě číslice. Čtyřmístný řetězec se interpretuje jako rok.
Formát data ODBC
{ d 'yyyy-MM-dd' }
Specifické pro rozhraní API ROZHRANÍ ODBC
Formát data W3C XML
yyyy-MM-ddTZD
Podporuje se pro použití XML/SOAP.
TZD je návrh časového pásma (Z nebo +hh:mm-hh:mm):
hh:mmpředstavuje posun časového pásma.hhje dvě číslice v rozsahu od0do14, které představují počet hodin v posunu časového pásma.mmje dvě číslice v rozsahu od0do59, které představují počet dalších minut v posunu časového pásma.+(plus) nebo-(minus) je povinné znaménko posunu časového pásma. Toto znaménko označuje, že pokud chcete získat místní čas, přičte se posun časového pásma nebo odečte od času UTC (Coordinated Universal Times). Platný rozsah posunu časového pásma je od-14:00do+14:00.
DODRŽOVÁNÍ PŘEDPISŮ ANSI a ISO 8601
datum odpovídá standardní definici ANSI SQL pro gregoriánský kalendář:
Datové typy Datetime umožňují ukládání kalendářních dat ve formátu gregoriánského formátu v rozsahu dat 0001-01-01 CE až 9999-12-31 CE.
Výchozí formát řetězcového literálu, který se používá pro klienty nižší úrovně, odpovídá standardnímu formátu SQL, který je definován jako yyyy-MM-dd. Tento formát je stejný jako definice ISO 8601 pro DATE.
Note
Pro Informatica je rozsah omezen na 1582-10-15 (15. října 1582 CE) na 9999-12-31 (31. prosince 9999 CE).
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_WSTR nebo DBTYPE_STR |
Java.sql.String |
String nebo SqString |
| date | yyyy-MM-dd |
SQL_WVARCHAR nebo SQL_VARCHAR |
DBTYPE_WSTR nebo DBTYPE_STR |
Java.sql.String |
String nebo SqString |
| datetime2 | yyyy-MM-dd HH:mm:ss[.nnnnnnn] |
SQL_WVARCHAR nebo SQL_VARCHAR |
DBTYPE_WSTR nebo DBTYPE_STR |
Java.sql.String |
String nebo SqString |
| datetimeoffset | yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm |
SQL_WVARCHAR nebo SQL_VARCHAR |
DBTYPE_WSTR nebo DBTYPE_STR |
Java.sql.String |
String nebo SqString |
Převod dat data a času
Při převodu na datové typy data a času SQL Server odmítne všechny hodnoty, které nerozpozná 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 data na jiné typy data a času
Tato část popisuje, co se stane při převodu datového typu data na jiné datové typy data a času.
Při převodu na čas(n) se převod nezdaří a vyvolá se chybová zpráva 206:
Konflikt typu Operand: Datum není kompatibilní s časem.
Pokud je převod na datetime, zkopíruje se komponenta data. Následující kód ukazuje výsledky převodu hodnoty data na hodnotu datetime.
DECLARE @date AS DATE = '12-10-25';
DECLARE @datetime AS DATETIME = @date;
SELECT @date AS '@date',
@datetime AS '@datetime';
Tady je soubor výsledků.
@date @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000
Pokud je převod na smalldatetime, hodnota data je v rozsahu smalldatetime, komponenta data se zkopíruje a časová komponenta je nastavena na 00:00:00.000. Pokud je hodnota data mimo rozsah hodnoty smalldatetime , je vyvolána chybová zpráva 242 a hodnota smalldatetime je nastavena na NULL:
Převod datového typu data na datové typy smalldatetime způsobil hodnotu mimo rozsah.
Následující kód ukazuje výsledky převodu hodnoty data na hodnotu smalldatetime .
DECLARE @date AS DATE = '1912-10-25';
DECLARE @smalldatetime AS SMALLDATETIME = @date;
SELECT @date AS '@date',
@smalldatetime AS '@smalldatetime';
Tady je soubor výsledků.
@date @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00
Pro převod na datetimeoffset(n), datum se zkopíruje a čas je nastaven na 00:00.0000000 +00:00. Následující kód ukazuje výsledky převodu hodnoty data na hodnotu datetimeoffset(3).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;
SELECT @date AS '@date',
@datetimeoffset AS '@datetimeoffset';
Tady je soubor výsledků.
@date @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00
Při převodu na datetime2(n) se zkopíruje komponenta data a časová komponenta je nastavena na 00:00.000000. Následující kód ukazuje výsledky převodu hodnoty data na hodnotu datetime2(3).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetime2 AS DATETIME2 (3) = @date;
SELECT @date AS '@date',
@datetime2 AS '@datetime2(3)';
Tady je soubor výsledků.
@date @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000
Převod řetězcových literálů na datum
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 kalendářního data .
| Literál vstupního řetězce | date |
|---|---|
| DATUM ODBC | Řetězcové literály ODBC se mapují na datový typ datetime . Jakákoli operace přiřazení z literálů ODBC DATETIME do typu data způsobí implicitní převod mezi datetime a typem, který definují pravidla převodu. |
| ČAS ODBC | Viz předchozí pravidlo ODBC DATE. |
| ODBC DATETIME | Viz předchozí pravidlo ODBC DATE. |
| POUZE DATE | Trivial |
| POUZE TIME | Zadají se výchozí hodnoty. |
| Pouze TIMEZONE | Zadají se výchozí hodnoty. |
| DATUM A ČAS | Použije se část DATE vstupního řetězce. |
| DATUM + ČASOVÉ PÁSMO | Nepovoleno. |
| TIME +TIMEZONE | Zadají se výchozí hodnoty. |
| DATUM + ČAS + ČASOVÉ PÁSMO | Používá se část DATUM místního data a času. |
Examples
Následující příklad porovnává výsledky přetypování řetězce k jednotlivým datovým typům data a času.
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';
Tady je soubor výsledků.
| Datový typ | 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 |