Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Definieert een datum die wordt gecombineerd met een tijd van een dag op basis van een 24-uurs klok zoals datum/tijd2 en voegt tijdzonebewustzijn toe op basis van Coordinated Universal Time (UTC).
beschrijving van datetimeoffset
| Property | Value |
|---|---|
| Syntax | DATETIMEOFFSET [ ( fractionele seconden precisie ) ] |
| Usage | DECLARE @MyDatetimeoffset DATETIMEOFFSET(7);CREATE TABLE Table1 (Column1 DATETIMEOFFSET(7)); |
| standaardtekenreeks letterlijke notaties (gebruikt voor client op down-level) | jjjj-MM-dd HH:mm:ss[.nnnnnnn] [{+|-}hh:mm] Zie de sectie Achterwaartse compatibiliteit voor clients op lager niveau die volgt voor meer informatie. |
| Datumbereik |
0001-01-01 tot en met 9999-12-311 januari 1 CE tot en met 31 december 9999 CE |
| Tijdsbereik |
00:00:00 tot en met 23:59:59.9999999 |
| tijdzoneverschilbereik |
-14:00 tot en met +14:00 |
| Elementbereiken |
yyyy is vier cijfers, variërend van 0001 tot 9999en met , die een jaar vertegenwoordigen.MM is twee cijfers, variërend van 01 tot 12, die een maand in het opgegeven jaar vertegenwoordigen.dd is twee cijfers, variërend van 01 tot 31 , afhankelijk van de maand, die een dag van de opgegeven maand vertegenwoordigen.HH is twee cijfers, variërend van 00 tot 23, die het uur vertegenwoordigen.mm is twee cijfers, variërend van 00 tot 59, die de minuut vertegenwoordigen.ss is twee cijfers, variërend van 00 tot 59, die de tweede vertegenwoordigen.n is nul tot zeven cijfers, variërend van 0 tot 9999999, die de fractionele seconden vertegenwoordigen.hh is twee cijfers die variëren van -14 tot +14.mm is twee cijfers die variëren van 00 tot 59. |
| Tekenlengte | 26 posities minimaal (jjjj-MM-dd HH:mm:ss {+|-}uu:mm) tot maximaal 34 (jjjj-MM-dd HH:mm:ss.nnnnnn {+|-}hh:mm:mm) |
| Precisie, schaal | Zie de onderstaande tabel. |
| Opslaggrootte | 10 bytes, vast is de standaardwaarde met de standaardwaarde van 100-ns fractionele seconde precisie. |
| Accuracy | 100 nanoseconden |
| Standaardwaarde | 1900-01-01 00:00:00 00:00 |
| Calendar | Gregorian |
| door de gebruiker gedefinieerde tweede precisie | Yes |
| tijdzone-offsetbewust en behoud | Yes |
| zomertijdbewuste | No |
| Opgegeven schaal | Resultaat (precisie, schaal) | Kolomlengte (bytes) | Precisie van breuken seconden |
|---|---|---|---|
| datetimeoffset | (34, 7) | 10 | 7 |
| datetimeoffset(0) | (26, 0) | 8 | 0 tot 2 |
| datetimeoffset(1) | (28, 1) | 8 | 0 tot 2 |
| datetimeoffset(2) | (29, 2) | 8 | 0 tot 2 |
| datetimeoffset(3) | (30, 3) | 9 | 3 tot 4 |
| datetimeoffset(4) | (31, 4) | 9 | 3 tot 4 |
| datetimeoffset(5) | (32, 5) | 10 | 5 tot 7 |
| datetimeoffset(6) | (33, 6) | 10 | 5 tot 7 |
| datetimeoffset(7) | (34, 7) | 10 | 5 tot 7 |
Ondersteunde letterlijke tekenreeksindelingen voor datetimeoffset
De volgende tabel bevat de ondersteunde letterlijke iso 8601-tekenreeksindelingen voor datetimeoffset. Zie datum en tijd voor informatie over alfabetische, numerieke, niet-patuur- en tijdnotaties voor de datum- en tijdonderdelen van datetimeoffset.
| ISO 8601 | Description |
|---|---|
| yyyy-MM-ddTHH:mm:ss[.nnnnnnn][{+|-}hh:mm] | Deze twee indelingen worden niet beïnvloed door de instellingen voor de landinstellingen van de SET LANGUAGE sessie SET DATEFORMAT . Spaties zijn niet toegestaan tussen de datum/tijd-offset en de datum/tijd-onderdelen . |
| jjjj-MM-ddTHH:mm:ss[.nnnnnnn]Z (UTC) | Deze indeling volgens ISO-definitie geeft aan dat het datum/tijd-gedeelte moet worden uitgedrukt in Coordinated Universal Time (UTC). Moet bijvoorbeeld 1999-12-12 12:30:30.12345 -07:00 worden weergegeven als 1999-12-12 19:30:30.12345Z. |
In het volgende voorbeeld worden de resultaten van het casten van een tekenreeks vergeleken met elke datum en tijd gegevenstype.
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';
Hier is het resultatenoverzicht.
| Gegevenstype | 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 |
Tijdzoneverschil
Een tijdzone-offset geeft de zone-offset van UTC op voor een tijd - of datum/tijd-waarde . De tijdzone-verschuiving kan worden weergegeven als [+|-] uu:mm:
hhis twee cijfers die variëren van00tot14en vertegenwoordigen het aantal uren in de tijdzone-offset.mmis twee cijfers, variërend van00tot59, die het aantal extra minuten in de tijdzone-offset vertegenwoordigen.+(plus) of-(min) is het verplichte teken voor een tijdzoneverschil. Dit teken geeft aan of de tijdzone-offset wordt toegevoegd of afgetrokken van de UTC-tijd om de lokale tijd te verkrijgen. Het geldige tijdzoneverschil is van-14:00tot+14:00.
Het tijdzoneverschilbereik volgt de W3C XML-standaard voor XSD-schemadefinitie en verschilt enigszins van de standaarddefinitie van SQL 2003 tot 12:59+14:00.
De precisie van de optionele typeparameter fractionele seconden geeft het aantal cijfers voor het fractionele deel van de seconden aan. Deze waarde kan een geheel getal zijn met 0 tot 7 (100 nanoseconden). De standaardprecisie van fractionele seconden is 100 ns (zeven cijfers voor het breukgedeelte van de seconden).
De gegevens worden opgeslagen in de database en verwerkt, vergeleken, gesorteerd en geïndexeerd op de server, zoals in UTC. De tijdzone-offset blijft behouden in de database voor het ophalen.
Bij de opgegeven tijdzone-offset wordt ervan uitgegaan dat de zomertijd (DST) op de hoogte is en wordt aangepast voor een bepaalde datum/tijd die zich in de DST-periode bevindt.
Voor het type datetimeoffset worden zowel UTC als lokaal (naar de permanente of geconverteerde tijdzone-offset) datum/ tijd gevalideerd tijdens het invoegen, bijwerken, berekenen, converteren of toewijzen van bewerkingen. De detectie van een ongeldige UTC- of lokale waarde (naar de permanente of geconverteerde tijdzone-offset) veroorzaakt een ongeldige waardefout. Is bijvoorbeeld 9999-12-31 10:10:00 geldig in UTC, maar loopt over in de lokale tijd naar de tijdzone-offset +13:50.
Syntaxis voor tijdzoneconversie
SQL Server 2016 (13.x) heeft de AT TIME ZONE syntaxis geïntroduceerd om zomertijdbewuste, universele tijdzoneconversies mogelijk te maken. Deze syntaxis is vooral handig bij het converteren van gegevens zonder tijdzone-offsets naar gegevens met tijdzone-offsets. Als u wilt converteren naar een bijbehorende datum/tijdoffset-waarde in een doeltijdzone, raadpleegt u AT TIME ZONE.
ANSI- en ISO 8601-naleving
De ANSI- en ISO 8601-nalevingssecties van de artikelen over datum en tijd zijn van toepassing op datetimeoffset.
Compatibiliteit met eerdere versies voor clients met een lager niveau
Sommige downlevel clients bieden geen ondersteuning voor de gegevenstypen tijd, datum, datum/tijd2 en datetimeoffset . In de volgende tabel ziet u de typetoewijzing tussen een exemplaar op hoger niveau van SQL Server en clients op een lager niveau.
| SQL Server-gegevenstype | Standaardtekenreeks letterlijke notatie doorgegeven aan client op down-level | ODBC op lager niveau | OLEDB op lager niveau | Down-level JDBC | Down-level SQLCLIENT |
|---|---|---|---|---|---|
| time | HH:mm:ss[.nnnnnnn] |
SQL_WVARCHAR of SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.sql.String |
String of SqString |
| date | yyyy-MM-dd |
SQL_WVARCHAR of SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.sql.String |
String of SqString |
| datetime2 | jjjj-MM-dd HH:mm:ss[.nnnnnnn] |
SQL_WVARCHAR of SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.sql.String |
String of SqString |
| datetimeoffset | jjjj-MM-dd HH:mm:ss[.nnnnnnn] [+|-]hh:mm |
SQL_WVARCHAR of SQL_VARCHAR |
DBTYPE_WSTRor DBTYPE_STR |
Java.sql.String |
String of SqString |
Ondersteuning voor Microsoft Fabric
In Microsoft Fabric kunt u momenteel geen kolommen maken met het gegevenstype datetimeoffset , maar u kunt datetimeoffset gebruiken voor het converteren van gegevens met de functie AT TIME ZONE , bijvoorbeeld:
SELECT CAST (CAST ('2024-07-03 00:00:00' AS DATETIMEOFFSET) AT TIME ZONE 'Pacific Standard Time' AS DATETIME2) AS PST;
In Microsoft Fabric SQL-database: precisie van 7 cijfers kan worden gebruikt, maar gespiegelde gegevens in Fabric OneLake zouden de tijdzone en de zevende tijdsdecimaal zijn ingekort. Dit kolomtype kan niet worden gebruikt als primaire sleutel in tabellen in de Fabric SQL-database.
Datum- en tijdgegevens converteren
Wanneer u converteert naar datum- en tijdgegevenstypen, weigert SQL Server alle waarden die niet als datums of tijden kunnen worden herkend. Zie CASTvoor informatie over het gebruik van de functies CONVERT en met datum- en tijdgegevens.
Converteren naar gegevenstype datetimeoffset
Deze sectie bevat een voorbeeld van het bijwerken van gegevens van een gegevenstype zonder verschuivingen naar een nieuwe kolom met het gegevenstype datetimeoffset .
Controleer eerst de tijdzonenaam in de sys.time_zone_info systeemcatalogusweergave.
SELECT * FROM sys.time_zone_info WHERE name = 'Pacific Standard Time';
In het volgende voorbeeld wordt de syntaxis VAN DE AT TIME ZONE tweemaal gebruikt. De voorbeeldcode maakt een tabel dbo.Audit, voegt gegevens toe die meerdere zomertijdwijzigingen omvatten en voegt een nieuwe datetimeoffset-kolom toe. We gaan ervan uit dat de AuditCreated kolom een *datum/tijd2-gegevenstype is zonder offsets en is geschreven met behulp van de UTC-tijdzone.
In de UPDATE instructie voegt de AT TIME ZONE syntaxis eerst UTC-tijdzoneverschil toe aan de bestaande AuditCreated kolomgegevens en converteert vervolgens de gegevens van UTC naar Pacific Standard Time, waarbij de historische gegevens voor elk afgelopen zomertijdbereik in de Verenigde Staten correct worden aangepast.
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;
Hier is het resultatenoverzicht.
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
Het gegevenstype datetimeoffset converteren naar andere datum- en tijdtypen
In deze sectie wordt beschreven wat er gebeurt wanneer een datum/tijd-gegevenstype wordt geconverteerd naar andere datum- en tijdgegevenstypen.
Wanneer u converteert naar datum, worden het jaar, de maand en de dag gekopieerd. De volgende code toont de resultaten van het converteren van een datetimeoffset(4) waarde naar een datumwaarde .
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';
Hier is het resultatenoverzicht.
@datetimeoffset date
------------------------------ ----------
2025-12-10 12:32:10.0000 +01:0 2025-12-10
Als de conversie naar tijd(n) is, worden het uur, de minuut, de seconde en de fractionele seconden gekopieerd. De tijdzonewaarde wordt afgekapt. Wanneer de precisie van de waarde datetimeoffset(n) groter is dan de precisie van de tijd(n) waarde, wordt de waarde naar boven afgerond. De volgende code toont de resultaten van het converteren van een datetimeoffset(4) waarde naar een tijd(3) waarde.
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';
Hier is het resultatenoverzicht.
@datetimeoffset time
------------------------------- ------------
2025-12-10 12:32:10.1237 +01:00 12:32:10.124
Wanneer u converteert naar datum/tijd, worden de datum- en tijdwaarden gekopieerd en wordt de tijdzone afgekapt. Wanneer de breuknauwkeurigheid van de datetimeoffset(n) waarde groter is dan drie cijfers, wordt de waarde afgekapt. De volgende code toont de resultaten van het converteren van een datetimeoffset(4) -waarde naar een datum/tijd-waarde .
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';
Hier is het resultatenoverzicht.
@datetimeoffset datetime
------------------------------ -----------------------
2025-12-10 12:32:10.1237 +01:0 2025-12-10 12:32:10.123
Voor conversies naar smalldatetime worden de datum en uren gekopieerd. De minuten worden afgerond met betrekking tot de waarde van de seconden en seconden zijn ingesteld op 0. De volgende code toont de resultaten van het converteren van een datetimeoffset(3) waarde naar een smalldatetime-waarde .
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';
Hier is het resultatenoverzicht.
@datetimeoffset @smalldatetime
------------------------------ -----------------------
1912-10-25 12:24:32.000 +10:00 1912-10-25 12:25:00
Als de conversie is naar datetime2(n), worden de datum en tijd gekopieerd naar de datum/tijd-waarde en wordt de tijdzone afgekapt. Wanneer de precisie van de datum/tijd2(n) waarde groter is dan de precisie van de datum/tijdoffset(n), worden de fractionele seconden afgekapt zodat deze passen. De volgende code toont de resultaten van het converteren van een datetimeoffset(4) waarde naar een datetime2(3) waarde.
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';
Hier is het resultatenoverzicht.
@datetimeoffset @datetime2
---------------------------------- ----------------------
1912-10-25 12:24:32.1277 +10:00 1912-10-25 12:24:32.12
Letterlijke tekenreeksen converteren naar datetimeoffset
Conversies van letterlijke tekenreeksen tot datum- en tijdtypen zijn toegestaan als alle delen van de tekenreeksen geldige notaties hebben. Anders wordt er een runtimefout gegenereerd. Impliciete conversies of expliciete conversies die geen stijl opgeven, van datum- en tijdtypen tot letterlijke tekenreeksen hebben de standaardindeling van de huidige sessie. In de volgende tabel ziet u de regels voor het converteren van een letterlijke tekenreeks naar het gegevenstype datetimeoffset .
| Letterlijke invoertekenreeks | datetimeoffset(n) |
|---|---|
ODBC DATE |
Letterlijke odbc-tekenreeksen worden toegewezen aan het gegevenstype datum/tijd . Elke toewijzingsbewerking van ODBC DATETIME letterlijke gegevens naar typen datetimeoffset veroorzaakt een impliciete conversie tussen datum/tijd en dit type, zoals gedefinieerd door de conversieregels. |
ODBC TIME |
ODBC DATE Vorige regel weergeven |
ODBC DATETIME |
ODBC DATE Vorige regel weergeven |
DATE alleen |
Het TIME onderdeel wordt standaard ingesteld op 00:00:00. De TIMEZONE standaardwaarde is +00:00 |
TIME alleen |
Het DATE onderdeel wordt standaard ingesteld op 1900-1-1. De TIMEZONE standaardwaarde is +00:00 |
TIMEZONE alleen |
Standaardwaarden worden opgegeven |
DATE + TIME |
De TIMEZONE standaardwaarde is +00:00 |
DATE + TIMEZONE |
Niet toegestaan |
TIME + TIMEZONE |
Het DATE onderdeel wordt standaard ingesteld op 1900-1-1 |
DATE + TIME + TIMEZONE |
Trivial |