Delen via


datetime2 (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Definieert een datum die wordt gecombineerd met een tijd van de dag die is gebaseerd op een 24-uurs klok. datetime2 kan worden beschouwd als een uitbreiding van het bestaande datum/tijd-type met een groter datumbereik, een grotere standaard fractionele precisie en optionele door de gebruiker opgegeven precisie.

datetime2 description

Property Value
Syntax datetime2 [ (fractionele seconden precisie) ]
Usage DECLARE @MyDatetime2 datetime2(7);
CREATE TABLE Table1 (Column1 datetime2(7));
Letterlijke standaardtekenreeksindeling

(gebruikt voor client op down-level)
yyyy-MM-dd HH:mm:ss[.nnnnnnn]

Zie compatibiliteit met eerdere versies voor clients op lager niveau verderop in dit artikel voor meer informatie.
Date range 0001-01-01 tot en met 9999-12-31

1 januari 1 CE tot en met 31 december 9999 CE
Time range 00:00:00 tot en met 23:59:59.9999999
Tijdzoneverschilbereik None
Element ranges yyyy is een getal van vier cijfers, variërend van 0001 tot 9999en met een jaar.

MM is een getal van twee cijfers, variërend van 01 tot 12, dat een maand in het opgegeven jaar vertegenwoordigt.

dd is een getal van twee cijfers, variërend van 01 tot 31 , afhankelijk van de maand, die een dag van de opgegeven maand vertegenwoordigt.

HH is een getal van twee cijfers, variërend van 00 tot 23, dat het uur vertegenwoordigt.

mm is een getal van twee cijfers, variërend van 00 tot 59, dat de minuut vertegenwoordigt.

ss is een getal van twee cijfers, variërend van 00 tot 59, dat de tweede vertegenwoordigt.

n* is een getal van nul tot zeven cijfers van 0 tot 9999999, dat de fractionele seconden vertegenwoordigt. In Informatica worden de fractionele seconden afgekapt als n kleiner is dan 3.
Character length 19 posities minimaal (yyyy-MM-dd HH:mm:ss) tot 27 maximum (yyyy-MM-dd HH:mm:ss.0000000)
Precision, scale 0 tot 7 cijfers, met een nauwkeurigheid van 100 nanoseconden (100 ns). De standaardprecisie is 7 cijfers.

In Microsoft Fabric Data Warehouse kan deze precisie een geheel getal zijn van 0 tot 6, zonder standaardwaarde. Precisie moet worden opgegeven in Microsoft Fabric Data Warehouse.
Opslaggrootte 1 6 bytes voor precisie kleiner dan 3.
7 bytes voor precisie 3 of 4.

Alle andere precisie vereist 8 bytes. 2
Accuracy 100 nanoseconds
Default value 1900-01-01 00:00:00
Calendar Gregorian
Door de gebruiker gedefinieerde tweede precisie Yes
Tijdzoneverschil bewust en behoud No
Zomertijdbewust No

1 Opgegeven waarden zijn voor niet-gecomprimeerde rowstore. Het gebruik van gegevenscompressie of columnstore kan de opslaggrootte voor elke precisie wijzigen. Daarnaast kan de opslaggrootte op schijf en in het geheugen verschillen. Datum /tijd2-waarden vereisen bijvoorbeeld altijd 8 bytes in het geheugen wanneer de batchmodus wordt gebruikt.

2 Wanneer een datum/tijd2-waarde wordt omgezet in een varbinaire waarde, wordt er een extra byte toegevoegd aan de varbinaire waarde om precisie op te slaan.

Zie sys.systypes of TYPEPROPERTY voor metagegevens van gegevenstypen. Precisie en schaal zijn variabel voor bepaalde datum- en tijdgegevenstypen. Zie COLUMNPROPERTY, COL_LENGTH of sys.columns om de precisie en schaal voor een kolom te verkrijgen.

Ondersteunde letterlijke notaties voor tekenreeksen voor datum/tijd2

De volgende tabellen bevatten de ondersteunde letterlijke indelingen voor ISO 8601- en ODBC-tekenreeksen voor datetime2. Zie datum en tijd voor informatie over alfabetische, numerieke, niet-patuur- en tijdnotaties voor de datum- en tijdonderdelen van datum/tijd2.

ISO 8601 Descriptions
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] Deze indeling wordt niet beïnvloed door de instellingen voor de landinstellingen van de SET LANGUAGE sessie SET DATEFORMAT . De Tdubbele punten () en de punt (:.) worden bijvoorbeeld 2024-05-02T19:58:47.1234567opgenomen in de letterlijke tekenreeks.
ODBC Description
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } ODBC API-specifiek:

Het aantal cijfers rechts van het decimaalteken, dat de fractionele seconden aangeeft, kan worden opgegeven van 0 tot 7 (100 nanoseconden).

ANSI- en ISO 8601-naleving

De ANSI- en ISO 8601-naleving van datum en tijd zijn van toepassing op datum/tijd2.

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 Down-level ODBC Down-level OLEDB Down-level JDBC Down-level SQLCLIENT
time HH:mm:ss[.nnnnnnn] SQL_WVARCHAR of SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String Tekenreeks of sqstring
date yyyy-MM-dd SQL_WVARCHAR of SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String Tekenreeks of sqstring
datetime2 yyyy-MM-dd HH:mm:ss[.nnnnnnn] SQL_WVARCHAR of SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String Tekenreeks of sqstring
datetimeoffset jjjj-MM-dd HH:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR of SQL_VARCHAR DBTYPE_WSTRor DBTYPE_STR Java.sql.String Tekenreeks of sqstring

Datum- en tijdgegevens converteren

Wanneer u converteert naar datum- en tijdgegevenstypen, weigert de database-engine alle waarden die niet als datums of tijden kunnen worden herkend. Zie CAST en CONVERT voor informatie over het gebruik van de functies CAST en CONVERT met datum- en tijdgegevens

Andere datum- en tijdtypen converteren naar het gegevenstype datetime2

In deze sectie wordt beschreven wat er gebeurt wanneer andere datum- en tijdgegevenstypen worden geconverteerd naar het gegevenstype datetime2 .

Wanneer de conversie afkomstig is van datum, worden het jaar, de maand en de dag gekopieerd. Het tijdonderdeel is ingesteld op 00:00:00.00000000. De volgende code toont de resultaten van het converteren van een date waarde naar een datetime2 waarde.

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

DECLARE @datetime2 AS DATETIME2 = @date;

SELECT @datetime2 AS '@datetime2',
       @date AS '@date';

Hier is het resultatenoverzicht.

@datetime2                  @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21

Wanneer de conversie van tijd(n) is, wordt het tijdonderdeel gekopieerd en wordt het datumonderdeel ingesteld op 1900-01-01. In het volgende voorbeeld ziet u de resultaten van het converteren van een tijdwaarde(7) naar een datum/tijd2-waarde .

DECLARE @time AS TIME (7) = '12:10:16.1234567';

DECLARE @datetime2 AS DATETIME2 = @time;

SELECT @datetime2 AS '@datetime2',
       @time AS '@time';

Hier is het resultatenoverzicht.

@datetime2                  @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567

Wanneer de conversie afkomstig is van smalldatetime, worden de uren en minuten gekopieerd. De seconden en fractionele seconden zijn ingesteld op 0. De volgende code toont de resultaten van het converteren van een smalldatetime waarde naar een datetime2 waarde.

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

DECLARE @datetime2 AS DATETIME2 = @smalldatetime;

SELECT @datetime2 AS '@datetime2',
       @smalldatetime AS '@smalldatetime';

Hier is het resultatenoverzicht.

@datetime2                  @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00

Wanneer de conversie afkomstig is van datetimeoffset(n), worden de datum- en tijdonderdelen gekopieerd. De tijdzone wordt afgekapt. In het volgende voorbeeld ziet u de resultaten van het converteren van een datetimeoffset(7) waarde naar een datetime2-waarde.

DECLARE @datetimeoffset AS DATETIMEOFFSET (7) = '2016-10-23 12:45:37.1234567 +10:0';

DECLARE @datetime2 AS DATETIME2 = @datetimeoffset;

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

Hier is het resultatenoverzicht.

@datetime2                  @datetimeoffset
--------------------------- ----------------------------------
2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00

Wanneer de conversie afkomstig is van datum/tijd, worden de datum en tijd gekopieerd. De breukprecisie wordt uitgebreid tot 7 cijfers. In het volgende voorbeeld ziet u de resultaten van het converteren van een datetime waarde naar een datetime2-waarde.

DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';

DECLARE @datetime2 AS DATETIME2 = @datetime;

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

Hier is het resultatenoverzicht.

@datetime2                  @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333

Expliciet casten naar datetime2 bij gebruik van datum/tijd

Onder databasecompatibiliteitsniveau 130 en hoger tonen impliciete conversies van datum/tijd tot datum/tijd2 verbeterde nauwkeurigheid door rekening te houden met de fractionele milliseconden, wat resulteert in verschillende geconverteerde waarden, zoals te zien is in het vorige voorbeeld. Gebruik expliciete casting naar het gegevenstype datetime2 wanneer er een gemengd vergelijkingsscenario tussen datum/tijd - en datum/tijd2-gegevenstypen bestaat. Zie verbeteringen in SQL Server en Azure SQL Database voor het verwerken van bepaalde gegevenstypen en ongebruikelijke bewerkingenvoor meer informatie.

Letterlijke tekenreeksen converteren naar datum/tijd2

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 datetime2 .

Letterlijke invoertekenreeks datetime2(n)
ODBC DATE Letterlijke odbc-tekenreeksen worden toegewezen aan het gegevenstype datum/tijd . Elke toewijzingsbewerking van ODBC DATETIME letterlijke gegevens in datum/tijd2-typen veroorzaakt een impliciete conversie tussen datum/tijd en dit type, zoals gedefinieerd door de conversieregels.
ODBC TIME Zie de vorige ODBC DATE regel.
ODBC DATETIME Zie de vorige ODBC DATE regel.
DATE alleen Het TIME onderdeel wordt standaard ingesteld op 00:00:00.
TIME alleen Het DATE onderdeel wordt standaard ingesteld op 1900-01-01.
TIMEZONE alleen Standaardwaarden worden opgegeven.
DATE + TIME Trivial.
DATE + TIMEZONE Not allowed.
TIME + TIMEZONE Het DATE onderdeel wordt standaard ingesteld op 1900-1-1. TIMEZONE invoer wordt genegeerd.
DATE + TIME + TIMEZONE De lokale DATETIME wordt gebruikt.

Examples

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

Hier is het resultatenoverzicht.

Data type 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