datetime (Transact-SQL)
platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform Platform System (PDW)databáze SQL v Microsoft Fabric
Definuje datum v kombinaci s časem dne se zlomkovými sekundami založenými na 24hodinovém formátu.
Nepoužívejte datetime pro novou práci. Místo toho použijte
Popis
Vlastnost | Hodnota |
---|---|
syntaxe |
DATETIME |
využití | DECLARE @MyDatetime DATETIME; CREATE TABLE Table1 (Column1 DATETIME); |
výchozí formáty řetězcového literálu (používané pro klienta nižší úrovně) | Nejde použít |
rozsahu dat |
1753-01-01 (1. ledna 1753) až 9999-12-31 (31. prosince 9999) |
časový rozsah | 00:00:00 až 23:59:59.997 |
rozsah posunu časového pásma | Žádný |
rozsahy elementů |
yyyy jsou čtyři číslice od 1753 do 9999 , které představují rok.MM jsou dvě číslice v rozsahu od 01 po 12 , které představují měsíc v zadaném roce.dd jsou dvě číslice, od 01 do 31 v závislosti na měsíci, který představuje den zadaného měsíce.HH jsou dvě číslice, od 00 po 23 , které představují hodinu.mm jsou dvě číslice, od 00 po 59 , které představují minutu.ss jsou dvě číslice v rozsahu od 00 po 59 , které představují sekundu.n* je nula až tři číslice v rozsahu od 0 po 999 , které představují desetinné sekundy. |
délka znaku | Maximálně 19 pozic až 23 |
velikost úložiště | 8 bajtů |
přesnost | Zaokrouhleno na přírůstky .000 , .003 nebo .007 sekund |
Výchozí hodnota | 1900-01-01 00:00:00 |
kalendář | Gregoriánský (zahrnuje celý rozsah let) |
přesnost desetinné sekundy definované uživatelem | Ne |
posun časového pásma s vědomím a zachováním | Ne |
s podporou letního času | Ne |
Podporované formáty řetězcového literálu pro datetime
Následující tabulky uvádějí podporované formáty řetězcového literálu pro datetime. Kromě rozhraní ODBC jsou řetězcové literály datetime v jednoduchých uvozovkách ('
), například 'string_literaL'
. Pokud prostředí není us_english
, řetězcové literály by měly být ve formátu Unicode N'string_literaL'
.
Číselný formát
Data kalendářních dat můžete zadat pomocí zadaného číselného měsíce. Například 5/20/97
představuje dvacátý den května 1997. Při použití číselného formátu data zadejte měsíc, den a rok v řetězci, který jako oddělovače používá lomítko (/
), spojovníky (-
) nebo tečky (.
). Tento řetězec musí být zobrazen v následujícím formátu:
<number separator number separator number [time] [time]>
Pokud je jazyk nastavený na us_english
, výchozí pořadí data je mdy
(měsíc, den, rok). Pořadí dat můžete změnit pomocí příkazu SET DATEFORMAT.
Nastavení pro SET DATEFORMAT
určuje způsob interpretace hodnot kalendářních dat. Pokud pořadí neodpovídá nastavení, hodnoty se neinterpretují jako kalendářní data. Data mimo pořadí můžou být nesprávně interpretována jako mimo rozsah nebo s nesprávnými hodnotami. Například 12/10/08
lze interpretovat jako jedno ze šesti kalendářních dat v závislosti na nastavení DATEFORMAT
. Čtyřdílný rok se interpretuje jako rok.
Formát data | Objednávka |
---|---|
[0]4/15/[19]96 |
mdy |
[0]4-15-[19]96 |
mdy |
[0]4.15.[19]96 |
mdy |
[0]4/[19]96/15 |
myd |
15/[0]4/[19]96 |
dmy |
15/[19]96/[0]4 |
dym |
[19]96/15/[0]4 |
ydm |
[19]96/[0]4/15 |
ymd |
Formát času |
---|
14:30 |
14:30[:20:997] |
14:30[:20.9] |
4am |
4 PM |
Abecední formát
Data kalendářních dat můžete zadat s měsícem zadaným jako úplný název měsíce. Například April
nebo zkratka měsíce Apr
, specifikovaná v aktuálním jazyce. Čárky jsou volitelné a velká písmena se ignorují.
Tady je několik pokynů pro použití abecedního formátu kalendářních dat:
Data data data a času uzavřete do jednoduchých uvozovek (
'
). Pro jiné jazyky než angličtinu použijteN''
.Znaky uzavřené v hranatých závorkách jsou volitelné.
Pokud zadáte pouze poslední dvě číslice v roce, hodnoty menší než poslední dvě číslice hodnoty dvoumístný rok odříznutí konfigurace jsou ve stejném století jako rok odříznutí. Hodnoty větší než nebo rovny hodnotě této možnosti jsou ve století, které přichází před odříznutý rok. Pokud je například dvouciferný rok
2050
(výchozí),25
se interpretuje jako2025
a50
se interpretuje jako1950
. Abyste se vyhnuli nejednoznačnosti, použijte čtyři číslice let.Pokud den chybí, zobrazí se první den v měsíci.
Nastavení relace
SET DATEFORMAT
se nepoužije, když zadáte měsíc v abecedním formátu.
Abecední |
---|
Apr[il] [15][,] 1996 |
Apr[il] 15[,] [19]96 |
Apr[il] 1996 [15] |
[15] Apr[il][,] 1996 |
15 Apr[il][,][19]96 |
15 [19]96 apr[il] |
[15] 1996 apr[il] |
1996 APR[IL] [15] |
1996 [15] APR[IL] |
Formát ISO 8601
Chcete-li použít formát ISO 8601, je nutné zadat každý prvek ve formátu, včetně T
, dvojtečky (:
) a tečky (.
), které jsou zobrazeny ve formátu.
Hranaté závorky označují, že zlomek druhé komponenty je nepovinný. Časová komponenta je určena ve formátu 24 hodin.
T
označuje začátek časové části hodnoty datetime.
Výhodou použití formátu ISO 8601 je, že se jedná o mezinárodní normu s jednoznačnou specifikací. Tento formát také není ovlivněn nastavením SET DATEFORMAT
nebo SET LANGUAGE.
Příklady:
2004-05-23T14:25:10
2004-05-23T14:25:10.487
ISO 8601 |
---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
Neformátovaný formát
Tento formát je podobný formátu ISO 8601, s výjimkou toho, že neobsahuje žádné oddělovače kalendářních dat.
Neoddělené |
---|
yyyyMMdd HH:mm:ss[.mmm] |
Formát ODBC
Rozhraní ODBC API definuje řídicí sekvence, které představují hodnoty data a času, které rozhraní ODBC volá data časového razítka. Tento formát časového razítka ODBC je podporován také definicí jazyka OLE DB (DBGUID-SQL) podporovaným poskytovatelem Microsoft OLE DB pro SQL Server. Aplikace, které používají rozhraní API založené na ADO, OLE DB a ODBC, můžou k reprezentaci kalendářních dat a časů použít tento formát časového razítka ODBC.
Řídicí sekvence časového razítka ODBC mají formát: { <literal_type> '<constant_value>' }
:
<literal_type>
určuje typ řídicí sekvence. Časová razítka mají tři specifikátory<literal_type>
:-
d
= pouze datum -
t
= pouze čas -
ts
= časové razítko (čas + datum)
-
<constant_value>
je hodnota řídicí sekvence.<constant_value>
musí pro každou<literal_type>
dodržovat tyto formáty:-
d
:yyyy-MM-dd
-
t
:hh:mm:ss[.fff]
-
ts
:yyyy-MM-dd HH:mm:ss[.fff]
-
ODBC |
---|
{ ts '1998-05-02 01:23:56.123' } |
{ d '1990-10-02' } |
{ t '13:33:41' } |
Zaokrouhlování přesnosti desetinné sekundy data a času
hodnoty data a času se zaokrouhlují na přírůstky .000
, .003
nebo .007
sekund, jak je znázorněno v následujícím příkladu.
SELECT '01/01/2024 23:59:59.999' AS [User-specified value],
CAST('01/01/2024 23:59:59.999' AS DATETIME) AS [System stored value]
UNION SELECT '01/01/2024 23:59:59.998', CAST('01/01/2024 23:59:59.998' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.997', CAST('01/01/2024 23:59:59.997' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.996', CAST('01/01/2024 23:59:59.996' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.995', CAST('01/01/2024 23:59:59.995' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.994', CAST('01/01/2024 23:59:59.994' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.993', CAST('01/01/2024 23:59:59.993' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.992', CAST('01/01/2024 23:59:59.992' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.991', CAST('01/01/2024 23:59:59.991' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.990', CAST('01/01/2024 23:59:59.990' AS DATETIME);
Tady je sada výsledků.
Uživatelem zadaná hodnota | Systémová uložená hodnota |
---|---|
01/01/2024 23:59:59.999 |
2024-01-02 00:00:00.000 |
01/01/2024 23:59:59.998 01/01/2024 23:59:59.997 01/01/2024 23:59:59.996 01/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.994 01/01/2024 23:59:59.993 01/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.991 01/01/2024 23:59:59.990 |
2024-01-01 23:59:59.990 |
DODRŽOVÁNÍ PŘEDPISŮ ANSI a ISO 8601
data a času není kompatibilní se standardem ANSI ani ISO 8601.
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 datetime
Tato část popisuje, co se stane, když se jiné datové typy data a času převedou na datový typ datetime.
Při převodu z datase zkopíruje rok, měsíc a den. Časová komponenta je nastavena na 00:00:00.000
. Následující kód ukazuje výsledky převodu hodnoty DATE
na hodnotu DATETIME
.
DECLARE @date DATE = '12-21-16';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Tady je sada výsledků.
@datetime @date
------------------------ -----------
2016-12-21 00:00:00.000 2016-12-21
Předchozí příklad používá konkrétní formát data (MM-DD-YY
).
DECLARE @date DATE = '12-21-16';
Příklad byste měli aktualizovat tak, aby odpovídal formátu vaší oblasti.
Můžete také dokončit příklad s formátem data kompatibilním se standardem ISO 8601 (yyyy-MM-dd
). Například:
DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Při převodu z času(n), komponenta času je zkopírována a komponenta data je nastavena na 1900-01-01
. Pokud je desetinná přesnost času(n) hodnota větší než tři číslice, je hodnota zkrácena tak, aby odpovídala. Následující příklad ukazuje výsledky převodu TIME(4)
hodnoty na DATETIME
hodnotu.
DECLARE @time TIME(4) = '12:10:05.1237';
DECLARE @datetime DATETIME = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
Tady je sada výsledků.
@datetime @time
------------------------ --------------
1900-01-01 12:10:05.123 12:10:05.1237
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 DATETIME
.
DECLARE @smalldatetime SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime DATETIME = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
Tady je sada výsledků.
@datetime @smalldatetime
------------------------ --------------------
2016-12-01 12:32:00.000 2016-12-01 12:32:00
Při převodu z datetimeoffset(n), zkopírují se komponenty data a času. Časové pásmo je zkráceno. Pokud je desetinná přesnost datetimeoffset(n) hodnota větší než tři číslice, je hodnota zkrácena. Následující příklad ukazuje výsledky převodu DATETIMEOFFSET(4)
hodnoty na DATETIME
hodnotu.
DECLARE @datetimeoffset DATETIMEOFFSET(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime DATETIME = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
Tady je sada výsledků.
@datetime @datetimeoffset
------------------------ -------------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
Při převodu z datetime2(n), datum a čas se zkopírují. Pokud je desetinná přesnost datetime2(n) hodnota větší než tři číslice, je hodnota zkrácena. Následující příklad ukazuje výsledky převodu DATETIME2(4)
hodnoty na DATETIME
hodnotu.
DECLARE @datetime2 DATETIME2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime DATETIME = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
Tady je sada výsledků.
@datetime @datetime2
------------------------ -------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
Příklady
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('2024-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET(7)) AS 'datetimeoffset';
Tady je sada výsledků.
Datový typ | Výstup |
---|---|
time |
12:35:29.1234567 |
date |
2024-05-08 |
smalldatetime |
2024-05-08 12:35:00 |
datetime |
2024-05-08 12:35:29.123 |
datetime2 |
2024-05-08 12:35:29.1234567 |
datetimeoffset |
2024-05-08 12:35:29.1234567 +12:15 |
Související obsah
-
CAST a CONVERT (Transact-SQL)