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 čas jednoho dne. Čas je bez povědomí o časovém pásmu a je založený na 24hodinovém formátu.
Note
Informace informatica jsou poskytovány pro zákazníky PDW pomocí konektoru Informatica.
Popis času
| Property | Value |
|---|---|
| Syntax | time [ (zlomkové druhé měřítko) ] |
| Usage | DEKLARACE @MyTime času(7) CREATE TABLE Table1 ( Čas sloupce1(7) |
| desetinné sekundy – měřítko | Určuje počet číslic pro zlomkovou část sekund. Může to být celé číslo od 0 do 7. Pro Informatica to může být celé číslo od 0 do 3. Výchozí desetinné měřítko je 7 (100ns). V Microsoft Fabric to může být celé číslo od 0 do 6 bez výchozího nastavení. Přesnost musí být zadána v Microsoft Fabric. |
| Výchozí formát řetězcového literálu (používá se pro klienta nižší úrovně) |
hh:mm:ss[.nnnn] pro Informatica) Další informace najdete v části Zpětná kompatibilita klientů nižší úrovně . |
| Range | 00:00:00.0000000 až 23:59:59.99999999 (00:00:00.000 až 23:59:59.999 pro Informatica) |
| Rozsahy prvků | hh je dvě číslice v rozsahu od 0 do 23, které představují hodinu. mm je dvě číslice v rozsahu od 0 do 59, které představují minutu. ss je dvě číslice v rozsahu od 0 do 59, které představují sekundu. n* je nula až sedm číslic v rozsahu od 0 do 9999999, které představují desetinné sekundy. Pro Informatica je n* nula až tři číslice v rozsahu od 0 do 999. |
| Délka postavy | 8 pozic minimálně (hh:mm:ss) až 16 maximum (hh:mm:ss.nnnnnnn). Pro Informatica je maximum 12 (hh:mm:ss.nnn). |
| Přesnost, měřítko (uživatel určuje pouze škálování) |
Podívejte se na následující tabulku. |
| Velikost úložiště | 5 bajtů, opraveno, je výchozí hodnota s výchozí desetinnou desetinnou přesností sekundy. Ve službě Informatica je výchozí hodnota 4 bajty, pevná a výchozí hodnota je 1 min. desetinná druhá přesnost. |
| Accuracy | 100 nanosekund (1 milisekund v Informatica) |
| Výchozí hodnota | 00:00:00 Tato hodnota se používá pro připojenou časovou část pro implicitní převod z data na datetime2 nebo datetimeoffset. |
| 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 |
| Zadané škálování | Výsledek (přesnost, měřítko) | Délka sloupce (bajty) | Fractional seconds přesnost |
|---|---|---|---|
| time | (16,7) [(12;3) v Informatica] | 5 (4 v Informatica) | 7 (3 v Informatica) |
| time(0) | (8,0) | 3 | 0-2 |
| time(1) | (10,1) | 3 | 0-2 |
| time(2) | (11,2) | 3 | 0-2 |
| time(3) | (12,3) | 4 | 3-4 |
| čas(4)* | (13,4) | 4 | 3-4 |
| čas(5)* | (14,5) | 5 | 5-7 |
| čas(6)* | (15,6) | 5 | 5-7 |
| time(7)* + | (16,7) | 5 | 5-7 |
* Není podporováno v Informatica.
+ Nepodporuje se v Microsoft Fabric.
Podporované formáty řetězcového literálu pro čas
Následující tabulka uvádí platné formáty řetězcového literálu pro datový typ času .
| SQL Server | Description |
|---|---|
| hh:mm[:ss][:zlomkové sekundy][AM][PM] hh:mm[:ss][.zlomkové sekundy][AM][PM] hhAM[PM] hh AM[PM] |
Hodinová hodnota 0 představuje hodinu po půlnoci (AM), bez ohledu na to, jestli je zadána hodnota AM. Pm nelze zadat, pokud se hodina rovná 0. Hodnoty hodin od 01 do 11 představují hodiny před polednem, pokud není zadána ani dopom. Hodnoty představují hodiny před polednem při zadání AM. Hodnoty představují hodiny po poledne, pokud je zadán pm. Hodnota hodiny 12 představuje hodinu, která začíná v poledne, pokud není zadána ani hodina pm. Pokud je zadánA AM, hodnota představuje hodinu, která začíná o půlnoci. Pokud je zadán pm, hodnota představuje hodinu, která začíná v poledne. Například 12:01 je 1 minuta po poledne, jak je 12:01; a 12:01 je minuta po půlnoci. Zadání 12:01 AM je stejné jako zadání 00:01 nebo 00:01 AM. Hodnoty hodin od 13 do 23 představují hodiny po poledne, pokud není zadána hodina nebo odp. Hodnoty také představují hodiny po poledne při zadání pm. AM nelze zadat, pokud je hodinová hodnota od 13 do 23. Hodnota 24 hodin není platná. Pokud chcete reprezentovat půlnoc, použijte 12:00 nebo 00:00. Před milisekundami může být dvojtečka (:) nebo tečka (.). Pokud se použije dvojtečka, znamená to, že se jedná o tisíciny sekundy. Pokud se použije tečka, jedna číslice znamená desetiny sekundy, dvě číslice znamenají setiny sekundy a tři číslice středník tisíců sekundy. Například 12:30:20:1 označuje 20 a tisíc sekund za 12:30; 12:30:20.1 označuje 20 a deset sekund za 12:30. |
| ISO 8601 | Notes |
|---|---|
| hh:mm:ss hh:mm[:ss][.zlomkové sekundy] |
hh je dvě číslice v rozsahu od 0 do 23, které představují počet hodin v posunu časového pásma. mm je dvě číslice v rozsahu od 0 do 59, které představují počet dalších minut v posunu časového pásma. |
| rozhraní ODBC | Notes |
|---|---|
| {t 'hh:mm:ss[.zlomkové sekundy]'} | Specifické pro rozhraní API ROZHRANÍ ODBC |
Dodržování standardů ANSI a ISO 8601
Použití hodiny 24 pro reprezentaci půlnoci a přestupu za sekundu nad 59, jak je definováno iso 8601 (5.3.2 a 5.3), nejsou podporovány zpětné kompatibility a konzistentní s existujícími typy data a času.
Výchozí formát řetězcového literálu (používaný pro klienta nižší úrovně) bude odpovídat standardnímu formuláři SQL, který je definován jako hh:mm:ss[.nnnnnnn]. Tento formát se podobá definici ISO 8601 pro ČAS s výjimkou zlomků sekund.
Zpětná kompatibilita pro klienty nižší úrovně
Někteří klienti nižší úrovně nepodporují datové typy time, 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[.nnnnnn] | 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 SQL Server 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 (Transact-SQL)
Převod datového typu time(n) na jiné typy data a času
Tato část popisuje, co se stane, když je datový typ času převeden na jiné datové typy data a času.
Při převodu na čas(n) se zkopíruje hodina, minuta a sekundy. Pokud je přesnost cíle menší než přesnost zdroje, zaokrouhlí se desetinná sekunda nahoru tak, aby odpovídala přesnosti cíle. Následující příklad ukazuje výsledky převodu time(4) hodnoty na time(3) hodnotu.
DECLARE @timeFrom TIME(4) = '12:34:54.1237';
DECLARE @timeTo TIME(3) = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
Tady je soubor výsledků.
time(3) time(4)
------------ -------------
12:34:54.124 12:34:54.1237
Pokud je převod na datum, převod selže a zobrazí se chybová zpráva 206: "Konflikt typu Operand: datum není kompatibilní s časem".
Při převodu na hodnotu datetime, hour, minute a second hodnoty se zkopírují; a datová součást je nastavena na hodnotu 1900-01-01. Pokud je přesnost desetinných sekund hodnoty time(n) větší než tři číslice, zkrátí se výsledek data a času . Následující kód ukazuje výsledky převodu hodnoty time(4) na hodnotu datetime.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime DATETIME = @time;
SELECT @time AS '@time', @datetime AS '@datetime';
Tady je soubor výsledků.
@time @datetime
------------- -----------------------
12:15:04.1237 1900-01-01 12:15:04.123
Pokud je převod na smalldatetime, datum je nastaveno na 1900-01-01 a hodnoty hodin a minut se zaokrouhlují nahoru. Sekundy a zlomkové sekundy jsou nastaveny na 0. Následující kód ukazuje výsledky převodu hodnoty time(4) na hodnotu smalldatetime.
Zobrazení zaokrouhlení minutové hodnoty:
DECLARE @time TIME(4) = '12:15:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Tady je soubor výsledků.
@time @smalldatetime
---------------- -----------------------
12:15:59.9999 1900-01-01 12:16:00--
Zobrazení zaokrouhlení hodnoty hodiny:
DECLARE @time TIME(4) = '12:59:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Tady je soubor výsledků.
@time @smalldatetime
---------------- -----------------------
12:59:59.9999 1900-01-01 13:00:00
Pokud je převod na datetimeoffset(n), je datum nastaveno na 1900-01-01 a čas se zkopíruje. Posun časového pásma je nastavený na +00:00. Pokud je přesnost desetinných sekund hodnoty time(n) větší než přesnost hodnoty datetimeoffset(n), zaokrouhlí se hodnota nahoru tak, aby odpovídala. Následující příklad ukazuje výsledky převodu time(4) hodnoty na datetimeoffset(3) typ.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetimeoffset DATETIMEOFFSET(3) = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
Tady je soubor výsledků.
@time @datetimeoffset
------------- ------------------------------
12:15:04.1237 1900-01-01 12:15:04.124 +00:00
Při převodu na datetime2(n) je datum nastaveno na hodnotu 1900-01-01, zkopíruje se časová komponenta a posun časového pásma je nastaven na 00:00. Pokud je přesnost desetinných sekund hodnoty datetime2(n) větší než hodnota time(n), hodnota se zaokrouhlí nahoru, aby se vešla nahoru. Následující příklad ukazuje výsledky převodu time(4) hodnoty na datetime2(2) hodnotu.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime2 DATETIME2(3) = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
Tady je soubor výsledků.
@datetime2 @time
----------------------- -------------
1900-01-01 12:15:04.124 12:15:04.1237
Převod řetězcových literálů na čas(n)
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 budou 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 času .
| Literál vstupního řetězce | Pravidlo konverze |
|---|---|
| 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 časových typů způsobí implicitní převod mezi datetime a tímto typem definovaným pravidly převodu. |
| ČAS ODBC | Viz výše uvedené pravidlo ODBC DATE. |
| ODBC DATETIME | Viz výše uvedené pravidlo ODBC DATE. |
| POUZE DATE | Zadají se výchozí hodnoty. |
| POUZE TIME | Trivial |
| Pouze TIMEZONE | Zadají se výchozí hodnoty. |
| DATUM A ČAS | Používá se část TIME vstupního řetězce. |
| DATUM + ČASOVÉ PÁSMO | Nepovoleno. |
| TIME +TIMEZONE | Používá se část TIME vstupního řetězce. |
| DATUM + ČAS + ČASOVÉ PÁSMO | Použije se část ČAS místního data a času. |
Examples
A. Porovnání datových typů data a času
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';
| 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 |
B. Vložení platných řetězcových literálů času do sloupce time(7)
Následující tabulka uvádí různé řetězcové literály, které lze vložit do sloupce s datovým typem time(7) s hodnotami, které jsou pak uloženy v tomto sloupci.
| Typ formátu řetězcového literálu | Vložený řetězcový literál | Hodnota time(7), která je uložená | Description |
|---|---|---|---|
| SQL Server | '01:01:01:123AM' | 01:01:01.1230000 | Pokud dvojtečka (:) nastane před přesností desetinných sekund, měřítko nesmí překročit tři pozice nebo dojde k chybě. |
| SQL Server | '01:01:01.1234567 AM' | 01:01:01.1234567 | Pokud je zadáno doslovné nebo pm, uloží se čas ve formátu 24 hodin bez literálu AM nebo PM. |
| SQL Server | '01:01:01.1234567 PM' | 13:01:01.1234567 | Pokud je zadáno doslovné nebo pm, uloží se čas ve formátu 24 hodin bez literálu AM nebo PM. |
| SQL Server | '01:01:01.1234567PM' | 13:01:01.1234567 | Mezera před AM nebo PM je volitelná. |
| SQL Server | '01AM' | 01:00:00.0000000 | Pokud je zadána pouze hodina, všechny ostatní hodnoty jsou 0. |
| SQL Server | '01 AM' | 01:00:00.0000000 | Mezera před AM nebo PM je volitelná. |
| SQL Server | '01:01:01' | 01:01:01.0000000 | Pokud není zadána přesnost desetinné sekundy, je každá pozice definovaná datovým typem 0. |
| ISO 8601 | '01:01:01.1234567' | 01:01:01.1234567 | K dosažení souladu s normou ISO 8601 použijte 24hodinový formát, nikoli DOM nebo PM. |
| ISO 8601 | '01:01:01.1234567 +01:01' | 01:01:01.1234567 | Volitelný rozdíl časového pásma (TZD) je povolen ve vstupu, ale není uložen. |
C. Vložení literálu časového řetězce do sloupců každého typu data a času
V následující tabulce první sloupec ukazuje literál časového řetězce, který se má vložit do sloupce databázové tabulky datového typu data nebo času zobrazeného ve druhém sloupci. Třetí sloupec zobrazuje hodnotu, která bude uložena ve sloupci databázové tabulky.
| Vložený řetězcový literál | Datový typ sloupce | Hodnota uložená ve sloupci | Description |
|---|---|---|---|
| '12:12:12.1234567' | time(7) | 12:12:12.1234567 | Pokud přesnost desetinných sekund překročí hodnotu zadanou pro sloupec, řetězec se zkrátí bez chyby. |
| '2007-05-07' | date | NULL | Jakákoli časová hodnota způsobí selhání příkazu INSERT. |
| '12:12:12' | smalldatetime | 1900-01-01 12:12:00 | Jakákoli hodnota přesnosti desetinné sekundy způsobí selhání příkazu INSERT. |
| '12:12:12.123' | datetime | 1900-01-01 12:12:12.123 | Jakákoli druhá přesnost delší než tři pozice způsobí selhání příkazu INSERT. |
| '12:12:12.1234567' | datetime2(7) | 1900-01-01 12:12:12.1234567 | Pokud přesnost desetinných sekund překročí hodnotu zadanou pro sloupec, řetězec se zkrátí bez chyby. |
| '12:12:12.1234567' | datetimeoffset(7) | 1900-01-01 12:12:12.1234567 +00:00 | Pokud přesnost desetinných sekund překročí hodnotu zadanou pro sloupec, řetězec se zkrátí bez chyby. |