Delen via


time (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 tijdstip van een dag. De tijd is zonder tijdzonebewustzijn en is gebaseerd op een 24-uurs klok.

Note

Informatica-informatie wordt verstrekt aan PDW-klanten met behulp van de Informatica Connector.

time Description

Property Value
Syntax time [ (fractionele tweede schaal) ]
Usage DECLAREER @MyTime tijd(7)

CREATE TABLE Table1 ( Column1 time(7) )
schalen van fractionele seconden Hiermee geeft u het aantal cijfers voor het breukgedeelte van de seconden op.

Dit kan een geheel getal zijn van 0 tot 7. Voor Informatica kan dit een geheel getal zijn van 0 tot 3.

De standaard fractionele schaal is 7 (100ns).

In Microsoft Fabric kan dit een geheel getal zijn van 0 tot 6, zonder standaardwaarde. Precisie moet worden opgegeven in Microsoft Fabric.
Letterlijke standaardtekenreeksindeling

(gebruikt voor client op down-level)
uu:mm:ss[.nnnnnnn] voor Informatica)

Zie de sectie Achterwaartse compatibiliteit voor clients op lager niveau voor meer informatie.
Range 00:00:00.000000 tot en met 23:59:59.999999999 (00:00:00.000 tot en met 23:59:59.999 voor Informatica)
Element ranges uu is twee cijfers, variërend van 0 tot 23, die het uur vertegenwoordigen.

mm is twee cijfers, variërend van 0 tot 59, die de minuut vertegenwoordigen.

ss is twee cijfers, variërend van 0 tot 59, die de tweede vertegenwoordigen.

n* is nul tot zeven cijfers, variërend van 0 tot 9999999, die de fractionele seconden vertegenwoordigen. Voor Informatica is n* nul tot drie cijfers, variërend van 0 tot 999.
Character length 8 posities minimum (uu:mm:ss) tot 16 maximum (uu:mm:ss.nnnnnnnn). Voor Informatica is het maximum 12 (uu:mm:ss.nnn).
Precision, scale

(gebruiker geeft alleen schaal aan)
Zie de onderstaande tabel.
Storage size 5 bytes, vast, is de standaardwaarde met de standaardwaarde van 100ns fractionele seconde precisie. In Informatica is de standaardwaarde 4 bytes, vast, met de standaardwaarde van 1 ms fractionele seconde precisie.
Accuracy 100 nanoseconden (1 milliseconde in Informatica)
Default value 00:00:00

Deze waarde wordt gebruikt voor het toegevoegde tijdgedeelte voor impliciete conversie van datumtot datum/tijd2 of datetimeoffset.
Door de gebruiker gedefinieerde tweede precisie Yes
Tijdzoneverschil bewust en behoud No
Zomertijdbewust No
Specified scale Resultaat (precisie, schaal) Kolomlengte (bytes) Fractional

seconds

precision
time (16,7) [(12,3) in Informatica] 5 (4 in Informatica) 7 (3 in Informatica)
time(0) (8,0) 3 0-2
time(1) (10,1) 3 0-2
time(2) (11,2) 3 0-2
time(3) (12,3) 4 3-4
time(4)* (13,4) 4 3-4
time(5)* (14,5) 5 5-7
time(6)* (15,6) 5 5-7
time(7)* + (16,7) 5 5-7

* Niet ondersteund in Informatica.

+ Niet ondersteund in Microsoft Fabric.

Ondersteunde letterlijke tekenreeksindelingen voor tijd

In de volgende tabel ziet u de geldige letterlijke notaties voor tekenreeksen voor het tijdgegevenstype .

SQL Server Description
hh:mm[:ss][:fractional seconds][AM][PM]

hh:mm[:ss][.fractional seconds][AM][PM]

hhAM[PM]

hh AM[PM]
De uurwaarde van 0 vertegenwoordigt het uur na middernacht (AM), ongeacht of AM is opgegeven. PM kan niet worden opgegeven wanneer het uur gelijk is aan 0.

Uurwaarden van 01 tot en met 11 vertegenwoordigen de uren vóór de middag als am of PM niet is opgegeven. De waarden vertegenwoordigen de uren vóór de middag wanneer AM is opgegeven. De waarden vertegenwoordigen uren na de middag als PM is opgegeven.

De uurwaarde 12 vertegenwoordigt het uur dat begint om de middag als am of PM niet is opgegeven. Als AM is opgegeven, geeft de waarde het uur aan dat begint om middernacht. Als PM is opgegeven, geeft de waarde het uur aan dat begint om de middag. 12:01 is bijvoorbeeld 1 minuut na middag, net als 12:01 pm; en 12:01 uur is één minuut na middernacht. Het opgeven van 12:01 uur is hetzelfde als het 00:01 of 00:01 UUR.

Uurwaarden van 13 tot en met 23 vertegenwoordigen uren na middag als AM of PM niet is opgegeven. De waarden vertegenwoordigen ook de uren na middag wanneer PM is opgegeven. AM kan niet worden opgegeven wanneer de uurwaarde 13 tot en met 23 is.

Een uurwaarde van 24 is ongeldig. Gebruik 12:00 of 00:00 uur om middernacht weer te geven.

Milliseconden kunnen worden voorafgegaan door een dubbele punt (:) of een punt (.). Als er een dubbele punt wordt gebruikt, betekent het getal duizendste van een seconde. Als een punt wordt gebruikt, betekent één cijfer tienden-van-een-seconde, twee cijfers betekenen honderdste van een seconde en drie cijfers duizendtallen-van-een-seconde. 12:30:20:1 geeft bijvoorbeeld 20 en duizendde seconden voorbij 12:30 aan; 12:30:20.1 geeft 20 en tiende seconden voorbij 12:30 aan.
ISO 8601 Notes
hh:mm:ss

hh:mm[:ss][.fractional seconds]
uu is twee cijfers, variërend van 0 tot 23, die het aantal uren in de tijdzoneverschil vertegenwoordigen.

mm is twee cijfers, variërend van 0 tot 59, die het aantal extra minuten in de tijdzone-offset vertegenwoordigen.
ODBC Notes
{t 'uu:mm:ss[.fractionele seconden]'} ODBC API-specifiek.

Naleving van ANSI- en ISO 8601-standaarden

Het gebruik van uur 24 om middernacht en schrikkel tweede te vertegenwoordigen boven de 59 zoals gedefinieerd door ISO 8601 (5.3.2 en 5.3) wordt niet ondersteund om compatibel te zijn met eerdere versies en consistent te zijn met de bestaande datum- en tijdtypen.

De standaardtekenreeks letterlijke notatie (gebruikt voor client op down-level) wordt uitgelijnd met het standaardformulier van SQL, dat is gedefinieerd als uu:mm:ss[.nnnnnnn]. Deze indeling lijkt op de ISO 8601-definitie voor TIME, met uitzondering van fractionele seconden.

Compatibiliteit met eerdere versies voor clients met een lager niveau

Sommige downlevel clients ondersteunen de gegevenstypen tijd, datum, datum/tijd2 en datetimeoffset niet. 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 uu: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 SQL Server alle waarden die niet als datums of tijden kunnen worden herkend. Zie CAST en CONVERT (Transact-SQL) voor informatie over het gebruik van de functies CAST en CONVERT met datum- en tijdgegevens

Tijd(n) gegevenstype converteren naar andere datum- en tijdtypen

In deze sectie wordt beschreven wat er gebeurt wanneer een tijdgegevenstype wordt geconverteerd naar andere datum- en tijdgegevenstypen.

Wanneer de conversie naar time(n) is, worden het uur, de minuut en de seconden gekopieerd. Wanneer de doelprecisie kleiner is dan de bronprecisie, worden de fractionele seconden naar boven afgerond om de doelprecisie aan te passen. In het volgende voorbeeld ziet u de resultaten van het converteren van een time(4) waarde naar een time(3)-waarde.

DECLARE @timeFrom TIME(4) = '12:34:54.1237';
DECLARE @timeTo TIME(3) = @timeFrom;

SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';

Hier is het resultatenoverzicht.

time(3)      time(4)  
------------ -------------  
12:34:54.124 12:34:54.1237  

Als de conversie tot datum is, mislukt de conversie en wordt het foutbericht 206 gegenereerd: "Operand type conflict: date is incompatibel met tijd".

Wanneer de conversie is naar datum/tijd, uur, minuut en tweede waarden worden gekopieerd; en het datumonderdeel is ingesteld op '1900-01-01'. Wanneer de precisie van de fractionele seconden van de tijd(n) groter is dan drie cijfers, wordt het datum/tijd-resultaat afgekapt. De volgende code toont de resultaten van het converteren van een time(4) waarde naar een datetime waarde.

DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime DATETIME = @time;

SELECT @time AS '@time', @datetime AS '@datetime';

Hier is het resultatenoverzicht.

@time         @datetime  
------------- -----------------------  
12:15:04.1237 1900-01-01 12:15:04.123  

Wanneer de conversie is ingesteld op smalldatetime, wordt de datum ingesteld op '1900-01-01' en worden de waarden voor uren en minuten naar boven afgerond. De seconden en fractionele seconden zijn ingesteld op 0. De volgende code toont de resultaten van het converteren van een time(4) waarde naar een smalldatetime waarde.

Afronden van de minuutwaarde weergeven:

DECLARE @time TIME(4) = '12:15:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;

SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';

Hier is het resultatenoverzicht.

@time            @smalldatetime  
---------------- -----------------------  
12:15:59.9999    1900-01-01 12:16:00--  

Afronden van de uurwaarde weergeven:

DECLARE @time TIME(4) = '12:59:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;

SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';

Hier is het resultatenoverzicht.

@time            @smalldatetime  
---------------- -----------------------  
12:59:59.9999    1900-01-01 13:00:00  

Als de conversie is ingesteld op datetimeoffset(n), wordt de datum ingesteld op '1900-01-01' en wordt de tijd gekopieerd. De tijdzone-offset is ingesteld op +00:00. Wanneer de precisie van de fractionele seconden van de tijd(n) waarde groter is dan de precisie van de datum/tijdoffset(n) waarde, wordt de waarde naar boven afgerond. In het volgende voorbeeld ziet u de resultaten van het converteren van een time(4) waarde naar een datetimeoffset(3) type.

DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetimeoffset DATETIMEOFFSET(3) = @time;

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

Hier is het resultatenoverzicht.

@time         @datetimeoffset  
------------- ------------------------------  
12:15:04.1237 1900-01-01 12:15:04.124 +00:00  

Bij het converteren naar datetime2(n), wordt de datum ingesteld op '1900-01-01', wordt het tijdonderdeel gekopieerd en wordt de tijdzone-offset ingesteld op 00:00. Wanneer de precisie van de fractionele seconden van de datum/tijd2(n) -waarde groter is dan de tijdswaarde(n), wordt de waarde naar boven afgerond. In het volgende voorbeeld ziet u de resultaten van het converteren van een time(4) waarde naar een datetime2(2)-waarde.

DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime2 DATETIME2(3) = @time;

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

Hier is het resultatenoverzicht.

@datetime2              @time  
----------------------- -------------  
1900-01-01 12:15:04.124 12:15:04.1237  

Letterlijke tekenreeks converteren naar tijd(n)

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. De volgende tabel bevat de regels voor het converteren van een letterlijke tekenreeks naar het tijdgegevenstype .

Letterlijke invoertekenreeks Conversion Rule
ODBC DATE Letterlijke odbc-tekenreeksen worden toegewezen aan het gegevenstype datum/tijd . Elke toewijzingsbewerking van LETTERLIJKE ODBC DATETIME in tijdtypen veroorzaakt een impliciete conversie tussen datum/tijd en dit type, zoals gedefinieerd door de conversieregels.
ODBC TIME Zie de bovenstaande ODBC DATE-regel.
ODBC DATETIME Zie de bovenstaande ODBC DATE-regel.
DATE only Standaardwaarden worden opgegeven.
TIME only Trivial
TIMEZONE only Standaardwaarden worden opgegeven.
DATUM + TIJD Het tijdgedeelte van de invoertekenreeks wordt gebruikt.
DATE + TIMEZONE Not allowed.
TIME + TIMEZONE Het tijdgedeelte van de invoertekenreeks wordt gebruikt.
DATE + TIME + TIMEZONE Het tijdgedeelte van lokale DATUM/tijd wordt gebruikt.

Examples

A. Datum- en tijdgegevenstypen vergelijken

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

B. Geldige tijdtekenreeks letterlijk invoegen in een tijd(7) kolom

De volgende tabel bevat verschillende letterlijke tekenreeksen die kunnen worden ingevoegd in een kolom met gegevenstypetijd(7) met de waarden die vervolgens in die kolom worden opgeslagen.

Type letterlijke tekenreeksnotatie Letterlijke tekenreeks ingevoegd time(7) waarde die is opgeslagen Description
SQL Server '01:01:01:123AM' 01:01:01.1230000 Wanneer een dubbele punt (:) vóór de precisie van fractionele seconden komt, kan de schaal niet groter zijn dan drie posities of wordt er een fout gegenereerd.
SQL Server '01:01:01.1234567 AM' 01:01:01.1234567 Wanneer AM of PM is opgegeven, wordt de tijd opgeslagen in de notatie van 24 uur zonder de letterlijke AM of PM
SQL Server '01:01:01.1234567 PM' 13:01:01.1234567 Wanneer AM of PM is opgegeven, wordt de tijd opgeslagen in de notatie van 24 uur zonder de letterlijke AM of PM
SQL Server '01:01:01.1234567PM' 13:01:01.1234567 Een spatie voor AM of PM is optioneel.
SQL Server '01AM' 01:00:00.0000000 Wanneer alleen het uur is opgegeven, zijn alle andere waarden 0.
SQL Server '01 AM' 01:00:00.0000000 Een spatie voor AM of PM is optioneel.
SQL Server '01:01:01' 01:01:01.0000000 Wanneer de precisie van fractionele seconden niet is opgegeven, is elke positie die wordt gedefinieerd door het gegevenstype 0.
ISO 8601 '01:01:01.1234567' 01:01:01.1234567 Als u wilt voldoen aan ISO 8601, gebruikt u een indeling van 24 uur, niet AM of PM.
ISO 8601 '01:01:01.1234567 +01:01' 01:01:01.1234567 Het optionele tijdzoneverschil (TZD) is toegestaan in de invoer, maar wordt niet opgeslagen.

C. Letterlijke tijdreeks invoegen in kolommen van elk datum- en tijddatumtype

In de volgende tabel toont de eerste kolom een letterlijke tijdtekenreeks die moet worden ingevoegd in een databasetabelkolom van het gegevenstype datum of tijd dat in de tweede kolom wordt weergegeven. In de derde kolom wordt de waarde weergegeven die wordt opgeslagen in de databasetabelkolom.

Letterlijke tekenreeks ingevoegd Kolomgegevenstype Waarde die is opgeslagen in kolom Description
'12:12:12.1234567' time(7) 12:12:12.1234567 Als de precisie van de breuk seconden de opgegeven waarde voor de kolom overschrijdt, wordt de tekenreeks zonder fouten afgekapt.
'2007-05-07' date NULL Elke tijdwaarde zorgt ervoor dat de INSERT-instructie mislukt.
'12:12:12' smalldatetime 1900-01-01 12:12:00 Elke precisiewaarde van fractionele seconden zorgt ervoor dat de INSERT-instructie mislukt.
'12:12:12.123' datetime 1900-01-01 12:12:12.123 Een tweede precisie die langer is dan drie posities, zorgt ervoor dat de INSERT-instructie mislukt.
'12:12:12.1234567' datetime2(7) 1900-01-01 12:12:12.1234567 Als de precisie van de breuk seconden de opgegeven waarde voor de kolom overschrijdt, wordt de tekenreeks zonder fouten afgekapt.
'12:12:12.1234567' datetimeoffset(7) 1900-01-01 12:12:12.1234567 +00:00 Als de precisie van de breuk seconden de opgegeven waarde voor de kolom overschrijdt, wordt de tekenreeks zonder fouten afgekapt.

See Also

CAST en CONVERTEREN (Transact-SQL)