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 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-311 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 |