Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-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:
hhkét számjegy, amelyek az időzóna-eltolásban lévő órák számát jelzik0014.mmkét számjegy, amelyek az0059idő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 |