Megosztás a következőn keresztül:


datetime (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database a Microsoft Fabric

Olyan dátumot határoz meg, amely egy napidővel és egy 24 órás időalapú tört másodpercekkel van kombinálva.

Ne használjon datetime új munkához. Ehelyett használja a idő, dátum, datetime2és datetimeoffset adattípust. Ezek a típusok igazodnak az SQL Standardhoz, és hordozhatóbbak. idő, datetime2 és datetimeoffset több másodperces pontosságot biztosítanak. datetimeoffset időzóna-támogatást biztosít a globálisan üzembe helyezett alkalmazásokhoz.

Leírás

Ingatlan Érték
szintaxis DATETIME
használati DECLARE @MyDatetime DATETIME;
CREATE TABLE Table1 (Column1 DATETIME);
Alapértelmezett sztringkonstansformátumok (alacsonyabb szintű ügyfélhez) Nem alkalmazható
Dátumtartomány 1753-01-01 (1753. január 1.) – 9999-12-31 (9999. december 31.)
időtartomány 00:00:00–23:59:59.997
időzóna eltolási tartománya Egyik sem
elemtartományok yyyy a 1753 és a 9999 közötti négy számjegy, amelyek egy évet jelölnek.

MM két számjegyből áll, a 01 és a 12között, amelyek egy hónapot jelölnek a megadott évben.

dd két számjegyből áll, a hónaptól függően 01 és 31 között, amelyek a megadott hónap egy napját jelölik.

HH két számjegy, a 00 és a 23között, amelyek az órát jelölik.

mm két számjegy, a 00 és a 59között, amelyek a percet jelölik.

ss két számjegyből áll, a 00 és a 59között, amelyek a másodikat jelölik.

n* nullától három számjegyig terjed, 0 és 999között, amelyek a tört másodpercet jelölik.
karakterhossz 19 pozíció minimum 23 maximumig
Tárterület mérete 8 bájt
pontossági .000, .003vagy .007 másodpercre kerekítve
Alapértelmezett érték 1900-01-01 00:00:00
Naptár Gergely (az évek teljes tartományát tartalmazza)
felhasználó által megadott tört másodperc pontosságú Nem
időzóna-eltolásérzékenység és -megőrzés Nem
Nyári időszámítási Nem

A datetime sztringkonstans-formátumai támogatottak

Az alábbi táblázatok felsorolják az datetimetámogatott sztringkonstansformátumokat. Az ODBC kivételével datetime sztringkonstansok egyetlen idézőjelben ('), például 'string_literaL'. Ha a környezet nem us_english, a sztringkonstansoknak Unicode formátumban kell lenniük N'string_literaL'.

Numerikus formátum

Megadhatja a dátumadatokat egy numerikus hónap megadásával. Például 5/20/97 1997. május huszadik napját jelöli. Numerikus dátumformátum használatakor adja meg a hónapot, a napot és az évet egy olyan sztringben, amely perjeleket (/), kötőjeleket (-) vagy pontokat (.) használ elválasztóként. Ennek a sztringnek a következő formában kell megjelennie:

<number separator number separator number [time] [time]>

Ha a nyelv us_englishvan beállítva, a dátum alapértelmezett sorrendje mdy (hónap, nap, év). A dátumsorrendet a SET DATEFORMAT utasítással módosíthatja.

A SET DATEFORMAT beállítása határozza meg a dátumértékek értelmezését. Ha a sorrend nem egyezik a beállítással, a rendszer nem dátumként értelmezi az értékeket. Előfordulhat, hogy a rendelésen kívüli dátumok helytelenül értelmezik a tartományon kívüli vagy helytelen értékeket. A 12/10/08 például a DATEFORMAT beállítástól függően hat dátum egyikeként értelmezhető. A négyrészes év az év.

Dátumformátum Megrendelés
[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
Időformátum
14:30
14:30[:20:997]
14:30[:20.9]
4am
4 PM

Betűrendes formátum

A dátumadatokat a hónap teljes neveként megadva is megadhatja. Például az aktuális nyelven megadott Aprilvagy Aprhónap rövidítése. A vesszők megadása nem kötelező, a nagybetűket pedig figyelmen kívül hagyja a rendszer.

Az alábbiakban néhány útmutatást talál a betűrendes dátumformátumok használatához:

  • A dátum- és időadatokat egyetlen idézőjelbe (') csatolja. Az angoltól eltérő nyelvek esetén használja a N''.

  • A szögletes zárójelek közé zárt karakterek megadása nem kötelező.

  • Ha csak az év utolsó két számjegyét adja meg, akkor a két számjegyből álló évszám utolsó két számjegyénél kisebb értékek konfigurációs beállítás ugyanabban az évszázadban van, mint a kivágás éve. A lehetőség értékénél nagyobb vagy azzal egyenlő értékek a leépítési év előtti évszázadban vannak. Ha például kétjegyű évkivágás2050 (alapértelmezett), a 252025, a 50 pedig 1950. A kétértelműség elkerülése érdekében használjon négyjegyű éveket.

  • Ha a nap hiányzik, a hónap első napja lesz megadva.

  • A SET DATEFORMAT munkamenet-beállítás nem lesz alkalmazva, ha betűrendes formában adja meg a hónapot.

Betűrendes
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]

ISO 8601 formátum

Az ISO 8601 formátum használatához meg kell adnia a formátum minden elemét, beleértve a T, a kettőspontokat (:) és a formátumban megjelenő pontot (.).

A zárójelek azt jelzik, hogy a második összetevő törtrésze nem kötelező. Az időösszetevő 24 órás formátumban van megadva. A T a datetime érték időrészének kezdetét jelzi.

Az ISO 8601 formátum használatának előnye, hogy nemzetközi szabvány, egyértelmű specifikációval. Ezt a formátumot a SET DATEFORMAT vagy SET LANGUAGE beállítás sem befolyásolja.

Példák:

  • 2004-05-23T14:25:10
  • 2004-05-23T14:25:10.487
ISO 8601
yyyy-MM-ddTHH:mm:ss[.mmm]
yyyyMMdd[ HH:mm:ss[.mmm]]

Nem formázott formátum

Ez a formátum hasonló az ISO 8601 formátumhoz, de nem tartalmaz dátumelválasztókat.

Nem átcsomagolt
yyyyMMdd HH:mm:ss[.mmm]

ODBC formátum

Az ODBC API feloldósorozatokat határoz meg a dátum- és időértékek megjelenítéséhez, amelyeket az ODBC időbélyeg-adatokat hív meg. Ezt az ODBC időbélyeg formátumot az SQL Server Microsoft OLE DB-szolgáltatója által támogatott OLE DB nyelvi definíció (DBGUID-SQL) is támogatja. Az ADO, az OLE DB és az ODBC-alapú API-kat használó alkalmazások ezt az ODBC-időbélyeg-formátumot használhatják dátumok és időpontok ábrázolására.

Az ODBC időbélyeg-feloldási sorozatai a következő formátumúak: { <literal_type> '<constant_value>' }:

  • <literal_type> a feloldósorozat típusát adja meg. Az időbélyegek három <literal_type> határozókkal rendelkeznek:

    • d = csak dátum
    • t = csak idő
    • ts = időbélyeg (idő + dátum)
  • <constant_value> a feloldósorozat értéke. <constant_value> az alábbi formátumokat kell követnie az egyes <literal_type>:

    • 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' }

A datetime tört másodperc pontosságának kerekítése

datetime értékek .000, .003vagy .007 másodpercre vannak kerekítve az alábbi példában látható módon.

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);

Itt van az eredményhalmaz.

Felhasználó által megadott érték Rendszer által tárolt érték
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

ANSI és ISO 8601 megfelelőség

datetime nem ANSI- vagy ISO 8601-kompatibilis.

Dátum- és időadatok konvertálása

A dátum- és idő típusú adattípusokká alakításkor az adatbázismotor elutasítja azokat az értékeket, amelyek nem ismerhetők fel dátumként vagy időpontként. A CAST és CONVERT függvények dátum- és időadatokkal való használatáról a CAST és CONVERTcímű témakörben olvashat.

Más dátum- és időtípusok konvertálása datetime adattípusra

Ez a szakasz azt ismerteti, hogy mi történik, ha más dátum- és idő típusú adattípusokat konvertál a datetime adattípusra.

Ha az átalakítás dátumból történik, a program kimásolja az évet, a hónapot és a napot. Az időösszetevő beállítása 00:00:00.000. Az alábbi kód egy DATE érték DATETIME értékké alakításának eredményeit mutatja be.

DECLARE @date DATE = '12-21-16';
DECLARE @datetime DATETIME = @date;

SELECT @datetime AS '@datetime', @date AS '@date';

Itt van az eredményhalmaz.

@datetime                @date
------------------------ -----------
2016-12-21 00:00:00.000  2016-12-21

Az előző példa régióspecifikus dátumformátumot (MM-DD-YY) használ.

DECLARE @date DATE = '12-21-16';

A példát úgy kell frissítenie, hogy megfeleljen a régió formátumának.

A példát az ISO 8601 szabványnak megfelelő dátumformátummal (yyyy-MM-dd) is elvégezheti. Például:

DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;

SELECT @datetime AS '@datetime', @date AS '@date';

Ha az átalakítás időről (n), az időösszetevőt átmásolja, a dátumösszetevő pedig 1900-01-01. Ha a idő tört pontossága (n) érték nagyobb három számjegynél, az érték csonkolt, hogy illeszkedjen. Az alábbi példa egy TIME(4) érték DATETIME értékké alakításának eredményeit mutatja be.

DECLARE @time TIME(4) = '12:10:05.1237';
DECLARE @datetime DATETIME = @time;

SELECT @datetime AS '@datetime', @time AS '@time';

Itt van az eredményhalmaz.

@datetime                @time
------------------------ --------------
1900-01-01 12:10:05.123  12:10:05.1237

Ha az átalakítás smalldatetime-ből történik, a program az órákat és perceket másolja át. A másodperc és a tört másodperc értéke 0. Az alábbi kód egy SMALLDATETIME érték DATETIME értékké alakításának eredményeit mutatja be.

DECLARE @smalldatetime SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime DATETIME = @smalldatetime;

SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';

Itt van az eredményhalmaz.

@datetime                @smalldatetime
------------------------ --------------------
2016-12-01 12:32:00.000  2016-12-01 12:32:00

Ha az átalakítás datetimeoffset(n)-, a rendszer átmásolja a dátum- és időösszetevőket. Az időzóna csonkolt. Ha a datetimeoffset(n) tört pontossága három számjegynél nagyobb, akkor az érték csonkolt lesz. Az alábbi példa egy DATETIMEOFFSET(4) érték DATETIME értékké alakításának eredményeit mutatja be.

DECLARE @datetimeoffset DATETIMEOFFSET(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime DATETIME = @datetimeoffset;

SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';

Itt van az eredményhalmaz.

@datetime                @datetimeoffset
------------------------ -------------------------------
1968-10-23 12:45:37.123  1968-10-23 12:45:37.1237 +10:0

Ha az átalakítás datetime2(n)-, a program kimásolja a dátumot és az időt. Ha a datetime2 (n) tört pontossága érték nagyobb három számjegynél, az érték csonkolt lesz. Az alábbi példa egy DATETIME2(4) érték DATETIME értékké alakításának eredményeit mutatja be.

DECLARE @datetime2 DATETIME2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime DATETIME = @datetime2;

SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';

Itt van az eredményhalmaz.

@datetime                @datetime2
------------------------ -------------------------
1968-10-23 12:45:37.123  1968-10-23 12:45:37.1237

Példák

Az alábbi példa összehasonlítja egy sztring minden dátum és idő adattípushoz való beírásának eredményeit.

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';

Itt van az eredményhalmaz.

Adattípus Hozam
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