datetimeoffset (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Egy olyan dátumot határoz meg, amely egy 24 órás óra alapján egy napidővel van kombinálva, például datetime2, és időzóna-tudatosságot ad hozzá az egyezményes világidő (UTC) alapján.

datetimeoffset leírása

Property Value
Syntax DATETIMEOFFSET [ ( tört másodperc pontosság ) ]
Usage DECLARE @MyDatetimeoffset DATETIMEOFFSET(7);
CREATE TABLE Table1 (Column1 DATETIMEOFFSET(7));
Alapértelmezett sztringkonstansformátumok (alacsonyabb szintű ügyfélhez) yyyy-MM-dd HH:mm:ss[.nnnnnnn] [{+|-}hh:mm]

További információkért tekintse meg az alábbi , alacsonyabb szintű ügyfelek visszamenőleges kompatibilitását ismertető szakaszt.
Dátumtartomány 0001-01-01 9999-12-31

9999. január 1., 1 CE– 9999. december 31.
Időtartomány 00:00:00 23:59:59.9999999
időzóna eltolási tartománya -14:00 +14:00
Elemtartományok yyyy négy számjegyből áll 00019999, 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ámjegy, a 0131 hónaptól függően, 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 nulla és hét számjegy között, 09999999a tört másodpercet jelképezve.
hh két számjegyből áll, amelyek a tartománytól a -14 következőig terjednek +14: .
mm két számjegyből áll, amelyek a tartománytól a 00 következőig terjednek 59: .
Karakter hossza 26 pozíció minimum (yyyyy-MM-dd HH:mm:ss {+|-}hh:mm) legfeljebb 34 -ig (ééé-MM-dd HH:mm:ss.nnnnnnn {+|-}hh:mm)
Pontosság, skálázás Lásd a következő táblázatot.
Tárterület mérete A rögzített érték 10 bájt, az alapértelmezett érték 100 ns tört másodperces pontosság.
Accuracy 100 nanoszekundum
Alapértelmezett érték 1900-01-01 00:00:00 00:00
Calendar Gregorian
felhasználó által megadott tört másodperc pontosságú Yes
időzóna-eltolásérzékenység és -megőrzés Yes
Nyári időszámítási No
Megadott skálázás Eredmény (pontosság, skálázás) Oszlophossz (bájt) Tört másodperc pontossága
datetimeoffset (34, 7) 10 7
datetimeoffset(0) (26, 0) 8 0–2
datetimeoffset(1) (28, 1) 8 0–2
datetimeoffset(2) (29, 2) 8 0–2
datetimeoffset(3) (30, 3) 9 3–4
datetimeoffset(4) (31, 4) 9 3–4
datetimeoffset(5) (32, 5) 10 5–7
datetimeoffset(6) (33, 6) 10 5–7
datetimeoffset(7) (34, 7) 10 5–7

A datetimeoffset sztringkonstans-formátumai támogatottak

Az alábbi táblázat a támogatott ISO 8601 sztringkonstansformátumokat sorolja fel a datetimeoffsethez. A datetimeoffset dátum- és időrészeinek betűrendes, numerikus, nem formázott és időformátumairól további információt a dátum és az idő című témakörben talál.

ISO 8601 Description
yyyy-MM-ddTHH:mm:ss[.nnnnnnn][{+|-}hh:mm] Ezt a két formátumot a munkamenet területi beállításai nem befolyásolják SET LANGUAGESET DATEFORMAT . A datetimeoffset és a datetime részek között szóközök nem engedélyezettek.
yyyy-MM-ddTHH:mm:ss[.nnnnnnnn]Z (UTC) Ez a formátum ISO-definíció szerint azt jelzi, hogy a dátum/idő részt az egyezményes világidő (UTC) szerint kell kifejezni. Például a 1999-12-12 12:30:30.12345 -07:00 következőként kell ábrázolni: 1999-12-12 19:30:30.12345Z.

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 ('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',
       CAST ('2007-05-08 12:35:29.1234567+12:15' AS DATETIMEOFFSET (7)) AS 'datetimeoffset ISO8601';

Itt van az eredmények összessége.

Adattípus 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
datetimeoffset ISO8601 2007-05-08 12:35:29.1234567 +12:15

Időzóna eltérése

Az időzóna eltolása az idő- vagydátum/időértékek UTC-től való eltolását határozza meg. Az időzóna eltolása [+|-] hh:mm:

  • hh két számjegy, amelyek az időzóna-eltolásban lévő órák számát jelzik 0014 .

  • mm két számjegy, amelyek az 0059időzóna eltolásának további perceinek számát jelölik.

  • + (plusz) vagy - (mínusz) az időzóna-eltolás kötelező jele. Ez a jel azt jelzi, hogy az időzóna eltolása hozzáadva vagy kivonva van-e az UTC időből a helyi idő lekéréséhez. Az időzóna-eltolás érvényes tartománya a következő: -14:00+14:00.

Az időzóna eltolási tartománya az XSD sémadefiníció W3C XML-szabványát követi, és kissé eltér az SQL 2003 standard definíciójától12:59. +14:00

Az opcionális típusparaméter tört másodperc pontossága a másodperc törtrészéhez tartozó számjegyek számát adja meg. Ez az érték 0 és 7 (100 nanoszekundum) egész szám lehet. Az alapértelmezett tört másodperc pontossága 100 ns (a másodperc tört részének hét számjegye).

Az adatok tárolása az adatbázisban történik, és feldolgozzák, összehasonlítják, rendezik és indexelik a kiszolgálón, mint az UTC-ben. Az időzóna eltolása megmarad az adatbázisban a lekéréshez.

A megadott időzóna-eltolás a nyári időszámításra (DST) vonatkozó, a DST-időszakban megadott dátumidőhöz igazodik.

Datetimeoffset típus esetén az UTC és a helyi (az állandó vagy konvertált időzóna eltolásáig) dátum/idő érték is érvényesítve lesz a beszúrási, frissítési, számtani, konvertálási vagy hozzárendelési műveletek során. Érvénytelen UTC vagy helyi (az állandó vagy konvertált időzóna-eltolás) dátum/időérték észlelése érvénytelen értékhiba. Érvényes például 9999-12-31 10:10:00 UTC-ben, de helyi idő szerint túlcsordul az időzóna-eltolásig +13:50.

Időzóna konvertálási szintaxisa

Az SQL Server 2016 (13.x) bevezette a szintaxist a AT TIME ZONE nyári időszámításra képes, univerzális időzóna-átalakítások megkönnyítésére. Ez a szintaxis különösen akkor hasznos, ha időzóna-eltolások nélkül konvertál adatokat időzóna-eltolásokkal rendelkező adatokká. A cél időzóna megfelelő datetimeoffset értékére való konvertáláshoz lásd: AT TIME ZONE.

ANSI és ISO 8601 megfelelőség

A dátum - és időcikkek ANSI és ISO 8601 megfelelőségi szakaszai a datetimeoffsetre vonatkoznak.

Visszamenőleges kompatibilitás alacsonyabb szintű ügyfelek esetén

Egyes alacsonyabb szintű ügyfelek nem támogatják az idő, a dátum, a datetime2 és a datetimeoffset adattípust . Az alábbi táblázat az SQL Server egy magasabb szintű példánya és a alacsonyabb szintű ügyfelek közötti típusleképezést mutatja be.

SQL Server-adattípus Az alapértelmezett sztringkonstansformátum átadva a leszintű ügyfélnek Alacsonyabb szintű ODBC Alacsonyabb szintű OLEDB Alacsonyabb szintű JDBC Alacsonyabb szintű SQLCLIENT
time HH:mm:ss[.nnnnnnn] SQL_WVARCHAR vagy SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String String vagy SqString
date yyyy-MM-dd SQL_WVARCHAR vagy SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String String vagy SqString
datetime2 yyyy-MM-dd HH:mm:ss[.nnnnnnnn] SQL_WVARCHAR vagy SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String String vagy SqString
datetimeoffset yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR vagy SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String String vagy SqString

Microsoft Fabric-támogatás

A Microsoft Fabricben jelenleg nem hozhat létre dátumtimeoffset adattípusú oszlopokat, de a datetimeoffset használatával konvertálhat adatokat az AT TIME ZONE függvénnyel, például:

SELECT CAST (CAST ('2024-07-03 00:00:00' AS DATETIMEOFFSET) AT TIME ZONE 'Pacific Standard Time' AS DATETIME2) AS PST;

A Microsoft Fabric SQL-adatbázisban 7 számjegy pontossága használható, de a tükrözött adatok a Fabric OneLake-be az időzónát és a hetedik tizedesjegyet vágnák le. Ez az oszloptípus nem használható elsődleges kulcsként a Fabric SQL-adatbázis tábláiban.

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

A dátum- és idő típusú adattípusokká alakításkor az SQL Server elutasítja azokat az értékeket, amelyeket nem tud dátumként vagy időként felismerni. 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.

Konvertálás datetimeoffset adattípusra

Ez a szakasz egy példa arra, hogy egy adattípus adatait eltolások nélkül frissítjük egy új datetimeoffset adattípus-oszlopra.

Először ellenőrizze az időzóna nevét a sys.time_zone_info rendszerkatalógus nézetéből.

SELECT * FROM sys.time_zone_info WHERE name = 'Pacific Standard Time';

Az alábbi példa kétszer használja az AT TIME ZONE szintaxist. A mintakód létrehoz egy táblát dbo.Audit, hozzáadja a több nyári időszámítást érintő módosításokat tartalmazó adatokat, és hozzáad egy új datetimeoffset oszlopot . Feltételezzük, hogy az AuditCreated oszlop egy *datetime2 adattípus eltolások nélkül, és az UTC időzónával lett megírva.

Az utasításban a UPDATE szintaxis először hozzáadja az AT TIME ZONE UTC időzóna-eltolást a meglévő AuditCreated oszlopadatokhoz, majd utc-ről utc-ről Pacific Standard Timeutc-ra alakítja át az adatokat, megfelelően módosítva az egyesült államokbeli nyári időszámítási időtartományok előzményadatait.

CREATE TABLE dbo.Audit (AuditCreated DATETIME2 (0) NOT NULL);
GO

INSERT INTO dbo.Audit (AuditCreated)
VALUES ('1/1/2024 12:00:00');

INSERT INTO dbo.Audit (AuditCreated)
VALUES ('5/1/2024 12:00:00');

INSERT INTO dbo.Audit (AuditCreated)
VALUES ('12/1/2024 12:00:00');
GO

ALTER TABLE dbo.Audit
ADD AuditCreatedOffset DATETIMEOFFSET (0) NULL;
GO

DECLARE @TimeZone AS VARCHAR (50);

SELECT @TimeZone = [name]
FROM sys.time_zone_info
WHERE [name] = 'Pacific Standard Time';

UPDATE dbo.Audit
SET AuditCreatedOffset = AuditCreated
    AT TIME ZONE 'UTC' AT TIME ZONE @TimeZone
WHERE AuditCreatedOffset IS NULL;
GO

SELECT *
FROM dbo.Audit;

Itt van az eredmények összessége.

AuditCreated         AuditCreatedOffset
-------------------  --------------------------
2024-01-01 12:00:00  2024-01-01 04:00:00 -08:00
2024-05-01 12:00:00  2024-05-01 05:00:00 -07:00
2024-12-01 12:00:00  2024-12-01 04:00:00 -08:00

Datetimeoffset adattípus konvertálása más dátum- és időtípusokra

Ez a szakasz azt ismerteti, hogy mi történik, ha egy datetimeoffset adattípus más dátum- és idő típusúvá alakul.

A dátummá alakításkor a program kimásolja az évet, a hónapot és a napot. Az alábbi kód egy datetimeoffset(4) érték dátumértékké alakításának eredményeit mutatja be.

DECLARE @datetimeoffset AS DATETIMEOFFSET (4) = '12-10-25 12:32:10 +01:00';
DECLARE @date AS DATE = @datetimeoffset;

SELECT @datetimeoffset AS '@datetimeoffset', @date AS 'date';

Itt van az eredmények összessége.

@datetimeoffset                 date
------------------------------ ----------
2025-12-10 12:32:10.0000 +01:0 2025-12-10

Ha az átalakítás idő(n) értékre történik, a program az órát, a percet, a másodpercet és a tört másodpercet másolja át. Az időzóna értéke csonkolt. Ha a datetimeoffset(n) érték pontossága nagyobb, mint az idő(n) értéke, az érték felfelé kerekítve lesz. Az alábbi kód egy datetimeoffset(4) érték idő(3) értékké alakításának eredményeit mutatja be.

DECLARE @datetimeoffset AS DATETIMEOFFSET (4) = '12-10-25 12:32:10.1237 +01:0';
DECLARE @time AS TIME (3) = @datetimeoffset;

SELECT @datetimeoffset AS '@datetimeoffset ', @time AS 'time';

Itt van az eredmények összessége.

@datetimeoffset                 time
------------------------------- ------------
2025-12-10 12:32:10.1237 +01:00 12:32:10.124

A dátum/idő értékre való konvertáláskor a rendszer kimásolja a dátum- és időértékeket, és csonkolja az időzónát. Ha a datetimeoffset(n) tört pontossága három számjegynél nagyobb, akkor az érték csonkolt lesz. Az alábbi kód egy datetimeoffset(4) érték dátum/idő értékké alakításának eredményeit mutatja be.

DECLARE @datetimeoffset AS DATETIMEOFFSET (4) = '12-10-25 12:32:10.1237 +01:0';
DECLARE @datetime AS DATETIME = @datetimeoffset;

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

Itt van az eredmények összessége.

@datetimeoffset                datetime
------------------------------ -----------------------
2025-12-10 12:32:10.1237 +01:0 2025-12-10 12:32:10.123

A kisdátumidőre való konvertáláshoz a program a dátumot és az órákat másolja. A percek fel vannak kerekítve a másodpercértékhez képest, a másodpercek pedig 0-ra vannak állítva. Az alábbi kód egy datetimeoffset(3) érték smalldatetime értékké alakításának eredményeit mutatja be.

DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = '1912-10-25 12:24:32 +10:0';
DECLARE @smalldatetime AS SMALLDATETIME = @datetimeoffset;

SELECT @datetimeoffset AS '@datetimeoffset', @smalldatetime AS '@smalldatetime';

Itt van az eredmények összessége.

@datetimeoffset                @smalldatetime
------------------------------ -----------------------
1912-10-25 12:24:32.000 +10:00 1912-10-25 12:25:00

Ha az átalakítás datetime2(n) értékre történik, a dátum és az idő a datetime2 értékre lesz másolva, és az időzóna csonkolva lesz. Ha a datetime2(n) érték pontossága nagyobb, mint a datetimeoffset(n) érték pontossága, a tört másodpercek csonkulnak, hogy elférjenek. Az alábbi kód egy datetimeoffset(4) érték dátum/idő2(3) értékké alakításának eredményeit mutatja be.

DECLARE @datetimeoffset AS DATETIMEOFFSET (4) = '1912-10-25 12:24:32.1277 +10:0';
DECLARE @datetime2 AS DATETIME2 (3) = @datetimeoffset;

SELECT @datetimeoffset AS '@datetimeoffset', @datetime2 AS '@datetime2';

Itt van az eredmények összessége.

@datetimeoffset                    @datetime2
---------------------------------- ----------------------
1912-10-25 12:24:32.1277 +10:00    1912-10-25 12:24:32.12

Sztringkonstansok konvertálása datetimeoffsetre

A sztringkonstansokból a dátum- és időtípusokba való konvertálás akkor engedélyezett, ha a sztringek minden része érvényes formátumban van. Ellenkező esetben futásidejű hiba jelentkezik. A stílust nem meghatározó implicit átalakítások vagy explicit átalakítások a dátum- és időtípusoktól a sztringkonstansokig az aktuális munkamenet alapértelmezett formátumában találhatók. Az alábbi táblázat a sztringkonstans datetimeoffset adattípusra való konvertálásának szabályait mutatja be.

Bemeneti sztring literálja datetimeoffset(n)
ODBC DATE Az ODBC-sztringkonstansok a datetime adattípusra vannak leképezve. A konstansokból ODBC DATETIMEa datetimeoffset típusokba történő hozzárendelési műveletek implicit konverziót okoznak a datetime és ez a típus között, a konvertálási szabályok által meghatározott módon.
ODBC TIME Lásd az előző ODBC DATE szabályt
ODBC DATETIME Lásd az előző ODBC DATE szabályt
DATE csak A TIME rész alapértelmezés szerint a következő.00:00:00 A TIMEZONE következő alapértelmezett érték: +00:00
TIME csak A DATE rész alapértelmezés szerint a következő.1900-1-1 A TIMEZONE következő alapértelmezett érték: +00:00
TIMEZONE csak Az alapértelmezett értékek megadása
DATE + TIME A TIMEZONE következő alapértelmezett érték: +00:00
DATE + TIMEZONE Tilos
TIME + TIMEZONE A DATE rész alapértelmezés szerint a következő: 1900-1-1
DATE + TIME + TIMEZONE Trivial