Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Förhandsversion av Microsoft Fabric
Definierar en tid på en dag. Tiden är utan tidszonsmedvetenhet och baseras på en 24-timmarsklocka.
Note
Informatica-information tillhandahålls för PDW-kunder som använder Informatica Connector.
time Description
| Property | Value |
|---|---|
| Syntax | time [ (fractional second scale) ] |
| Usage | DEKLARERA @MyTime tid(7) CREATE TABLE Table1 (Column1 time(7) ) |
| skalning av bråksekunder | Anger antalet siffror för bråkdelen av sekunderna. Detta kan vara ett heltal från 0 till 7. För Informatica kan detta vara ett heltal från 0 till 3. Standardskalan för bråk är 7 (100ns). I Microsoft Fabric kan detta vara ett heltal från 0 till 6, utan standard. Precision måste anges i Microsoft Fabric. |
| Standardformat för strängliteral (används för klient på nednivå) |
hh:mm:ss[.nnnnnnn] för Informatica) Mer information finns i avsnittet Bakåtkompatibilitet för klienter på nednivå . |
| Range | 00:00:00.0000000 till 23:59:59.99999999 (00:00:00.000 till 23:59:59.999 för Informatica) |
| Element ranges | hh är två siffror, från 0 till 23, som representerar timmen. mm är två siffror, från 0 till 59, som representerar minuten. ss är två siffror, från 0 till 59, som representerar den andra. n* är noll till sju siffror, från 0 till 9999999, som representerar bråksekunderna. För Informatica är n* noll till tre siffror, från 0 till 999. |
| Character length | Minst 8 positioner (hh:mm:ss) till högst 16 (hh:mm:ss.nnnnnnn). För Informatica är maxvärdet 12 (hh:mm:ss.nnn). |
| Precision, scale (användaren anger endast skalning) |
Se tabellen nedan. |
| Storage size | 5 byte, fast, är standardvärdet med standardvärdet 100ns bråkdels sekundprecision. I Informatica är standardvärdet 4 byte, fast, med standardvärdet 1 ms bråkdels sekundprecision. |
| Accuracy | 100 nanosekunder (1 millisekunder i Informatica) |
| Default value | 00:00:00 Det här värdet används för den bifogade tidsdelen för implicit konvertering från datum till datetime2 eller datetimeoffset. |
| Användardefinierad bråkdels sekundprecision | Yes |
| Tidszonsförskjutningsmedveten och konservering | No |
| Sommartidsmedveten | No |
| Specified scale | Resultat (precision, skala) | Kolumnlängd (byte) | Fractional seconds precision |
|---|---|---|---|
| time | (16,7) [(12,3) i Informatica] | 5 (4 i Informatica) | 7 (3 i 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 |
* Stöds inte i Informatica.
+ Stöds inte i Microsoft Fabric.
Strängliterala format som stöds för tid
I följande tabell visas giltiga strängliterala format för tidsdatatypen .
| SQL Server | Description |
|---|---|
| hh:mm[:ss][:fractional seconds][AM][PM] hh:mm[:ss][.fractional seconds][AM][PM] hhAM[PM] hh AM[PM] |
Timvärdet 0 representerar timmen efter midnatt (AM), oavsett om AM har angetts. PM kan inte anges när timmen är lika med 0. Timvärden från 01 till 11 representerar timmarna före 12:00 om varken AM eller PM anges. Värdena representerar timmarna före klockan 12 när AM anges. Värdena representerar timmar efter 12:00 om PM anges. Timvärdet 12 representerar den timme som börjar kl. 12 om varken AM eller PM har angetts. Om AM anges representerar värdet den timme som börjar vid midnatt. Om PM anges representerar värdet den timme som börjar kl. 12.00. Till exempel är 12:01 1 minut efter 12:01, som är 12:01; och 12:01 är en minut efter midnatt. Att ange 12:01 AM är detsamma som att ange 00:01 eller 00:01 AM. Timvärden från 13 till 23 representerar timmar efter 12:00 om AM eller PM inte har angetts. Värdena representerar också timmarna efter 12:00 när PM anges. AM kan inte anges när timvärdet är mellan 13 och 23. Ett timvärde på 24 är ogiltigt. Om du vill representera midnatt använder du 12:00 eller 00:00. Millisekunder kan föregås av antingen ett kolon (:) eller en punkt (.). Om ett kolon används betyder talet tusendelar av en sekund. Om en period används innebär en ensiffrig tiondels sekund, två siffror betyder hundradelar av en sekund och tre siffror betyder tusendelar av en sekund. 12:30:20:1 anger till exempel 20 och 1 000 sekunder efter 12:30; 12:30:20.1 anger 20 och en tiondel sekunder över 12:30. |
| ISO 8601 | Notes |
|---|---|
| hh:mm:ss hh:mm[:ss][.fractional seconds] |
hh är två siffror, från 0 till 23, som representerar antalet timmar i tidszonsförskjutningen. mm är två siffror, från 0 till 59, som representerar antalet ytterligare minuter i tidszonsförskjutningen. |
| ODBC | Notes |
|---|---|
| {t 'hh:mm:ss[.fractional seconds]'} | ODBC API specifikt. |
Efterlevnad av ANSI- och ISO 8601-standarder
Användning av timme 24 för att representera midnatt och hoppa tvåa över 59 enligt definitionen i ISO 8601 (5.3.2 och 5.3) stöds inte för att vara bakåtkompatibla och överensstämma med befintliga datum- och tidstyper.
Standardformatet strängliteral (används för klient på nednivå) överensstämmer med SQL-standardformuläret, som definieras som hh:mm:ss[.nnnnnnnn]. Det här formatet liknar ISO 8601-definitionen för TIME exklusive bråksekunder.
Bakåtkompatibilitet för klienter på nednivå
Vissa klienter på nednivå stöder inte datatyperna tid, datum, datetime2 och datetimeoffset . I följande tabell visas typmappningen mellan en instans på hög nivå av SQL Server och klienter på nednivå.
| SQL Server-datatyp | Standardformat för strängliteral som skickas till klient på nednivå | Down-level ODBC | Down-level OLEDB | Down-level JDBC | Down-level SQLCLIENT |
|---|---|---|---|---|---|
| time | hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR eller SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Sträng eller SqString |
| date | YYYY-MM-DD | SQL_WVARCHAR eller SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Sträng eller SqString |
| datetime2 | YYYY-MM-DD hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR eller SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Sträng eller SqString |
| datetimeoffset | ÅÅÅÅ-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR eller SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | Sträng eller SqString |
Konvertera datum- och tidsdata
När du konverterar till datum- och tidsdatatyper avvisar SQL Server alla värden som inte kan identifieras som datum eller tider. Information om hur du använder funktionerna CAST och CONVERT med datum- och tidsdata finns i CAST och CONVERT (Transact-SQL)
Konvertera tid(n) datatyp till andra datum- och tidstyper
I det här avsnittet beskrivs vad som händer när en tidsdatatyp konverteras till andra datatyper för datum och tid.
När konverteringen är till time(n)kopieras timme, minut och sekunder. När målprecisionen är mindre än källprecisionen avrundas bråksekunderna uppåt för att passa målprecisionen. I följande exempel visas resultatet av konverteringen av ett time(4)-värde till ett time(3) värde.
DECLARE @timeFrom TIME(4) = '12:34:54.1237';
DECLARE @timeTo TIME(3) = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
Här är resultatet.
time(3) time(4)
------------ -------------
12:34:54.124 12:34:54.1237
Om konverteringen är hittills misslyckas konverteringen och felmeddelandet 206 utlöses: "Operand type clash: date is incompatible with time".
När konverteringen är till datetime, timme, minut och andra värden kopieras; och datumkomponenten är inställd på "1900-01-01". När precisionen i bråksekunderna för värdet time(n) är större än tre siffror trunkeras datetime-resultatet . Följande kod visar resultatet av konvertering av ett time(4)-värde till ett datetime värde.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime DATETIME = @time;
SELECT @time AS '@time', @datetime AS '@datetime';
Här är resultatet.
@time @datetime
------------- -----------------------
12:15:04.1237 1900-01-01 12:15:04.123
När konverteringen är till smalldatetime är datumet inställt på "1900-01-01", och värdena för timme och minut avrundas uppåt. Sekunderna och bråksekunderna är inställda på 0. Följande kod visar resultatet av konvertering av ett time(4)-värde till ett smalldatetime värde.
Visa avrundning av minutvärdet:
DECLARE @time TIME(4) = '12:15:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Här är resultatet.
@time @smalldatetime
---------------- -----------------------
12:15:59.9999 1900-01-01 12:16:00--
Visa avrundning av timvärdet:
DECLARE @time TIME(4) = '12:59:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Här är resultatet.
@time @smalldatetime
---------------- -----------------------
12:59:59.9999 1900-01-01 13:00:00
Om konverteringen är till datetimeoffset(n) anges datumet till "1900-01-01", och tiden kopieras. Tidszonsförskjutningen är inställd på +00:00. När precisionen i bråksekunderna för värdet time(n) är större än precisionen för datetimeoffset(n) avrundas värdet uppåt så att det passar. I följande exempel visas resultatet av konverteringen av ett time(4) värde till en datetimeoffset(3) typ.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetimeoffset DATETIMEOFFSET(3) = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
Här är resultatet.
@time @datetimeoffset
------------- ------------------------------
12:15:04.1237 1900-01-01 12:15:04.124 +00:00
När du konverterar till datetime2(n), anges datumet till "1900-01-01", tidskomponenten kopieras och tidszonsförskjutningen är inställd på 00:00. När precisionen i bråksekunderna för datetime2(n) är större än tidsvärdet(n) avrundas värdet uppåt så att det passar. I följande exempel visas resultatet av konverteringen av ett time(4)-värde till ett datetime2(2) värde.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime2 DATETIME2(3) = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
Här är resultatet.
@datetime2 @time
----------------------- -------------
1900-01-01 12:15:04.124 12:15:04.1237
Konvertera strängliteraler till time(n)
Konverteringar från strängliteraler till datum- och tidstyper tillåts om alla delar av strängarna är i giltiga format. Annars utlöses ett körningsfel. Implicita konverteringar eller explicita konverteringar som inte anger ett format, från datum- och tidstyper till strängliteraler kommer att vara i standardformatet för den aktuella sessionen. I följande tabell visas reglerna för att konvertera en strängliteral till tidsdatatypen .
| Indatasträngliteral | Conversion Rule |
|---|---|
| ODBC DATE | ODBC-stränglitaraler mappas till datatypen datetime . Tilldelningsåtgärder från ODBC DATETIME-literaler till tidstyper orsakar en implicit konvertering mellan datetime och den här typen enligt definitionen i konverteringsreglerna. |
| ODBC TIME | Se ODBC DATE-regeln ovan. |
| ODBC DATETIME | Se ODBC DATE-regeln ovan. |
| DATE only | Standardvärden anges. |
| TIME only | Trivial |
| TIMEZONE only | Standardvärden anges. |
| DATUM + TID | TIME-delen av indatasträngen används. |
| DATUM + TIDSZON | Not allowed. |
| TID + TIDSZON | TIME-delen av indatasträngen används. |
| DATUM + TID + TIDSZON | TIME-delen av den lokala DATETIME används. |
Examples
A. Jämföra datatyper för datum och tid
I följande exempel jämförs resultatet av gjutning av en sträng med varje datum och tid datatyp.
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. Infoga giltiga tidssträngliteraler i en tidskolumn (7)
I följande tabell visas olika strängliteraler som kan infogas i en kolumn med datatypstid(7) med de värden som sedan lagras i den kolumnen.
| Formattyp för strängliteral | Infogad strängliteral | time(7) värde som lagras | Description |
|---|---|---|---|
| SQL Server | '01:01:01:123AM' | 01:01:01.1230000 | När ett kolon (:) kommer före precision i bråksekunder, kan skala inte överskrida tre positioner eller så utlöses ett fel. |
| SQL Server | '01:01:01.1234567 AM' | 01:01:01.1234567 | När AM eller PM anges lagras tiden i 24-timmarsformat utan literal AM eller PM |
| SQL Server | '01:01:01.1234567 PM' | 13:01:01.1234567 | När AM eller PM anges lagras tiden i 24-timmarsformat utan literal AM eller PM |
| SQL Server | '01:01:01.1234567PM' | 13:01:01.1234567 | Ett utrymme före AM eller PM är valfritt. |
| SQL Server | '01AM' | 01:00:00.0000000 | När endast timmen har angetts är alla andra värden 0. |
| SQL Server | '01 AM' | 01:00:00.0000000 | Ett utrymme före AM eller PM är valfritt. |
| SQL Server | '01:01:01' | 01:01:01.0000000 | När precision för bråksekunder inte anges är varje position som definieras av datatypen 0. |
| ISO 8601 | '01:01:01.1234567' | 01:01:01.1234567 | Om du vill följa ISO 8601 använder du 24-timmarsformat, inte AM eller PM. |
| ISO 8601 | '01:01:01.1234567 +01:01' | 01:01:01.1234567 | Den valfria tidszonsskillnaden (TZD) tillåts i indata men lagras inte. |
C. Infoga tidssträngliteral i kolumner av datum- och tidstyp för varje datum och tid
I följande tabell visar den första kolumnen en tidssträngliteral som ska infogas i en databastabellkolumn med datatypen datum eller tid som visas i den andra kolumnen. Den tredje kolumnen visar det värde som ska lagras i databastabellkolumnen.
| Infogad strängliteral | Kolumndatatyper | Värde som lagras i kolumnen | Description |
|---|---|---|---|
| '12:12:12.1234567' | time(7) | 12:12:12.1234567 | Om precisionen för bråksekunder överskrider det angivna värdet för kolumnen trunkeras strängen utan fel. |
| '2007-05-07' | date | NULL | Ett tidsvärde gör att INSERT-instruktionen misslyckas. |
| '12:12:12' | smalldatetime | 1900-01-01 12:12:00 | Eventuella precisionsvärde för bråk sekunder gör att INSERT-instruktionen misslyckas. |
| '12:12:12.123' | datetime | 1900-01-01 12:12:12.123 | Om andra precisionen är längre än tre positioner misslyckas INSERT-instruktionen. |
| '12:12:12.1234567' | datetime2(7) | 1900-01-01 12:12:12.1234567 | Om precisionen för bråksekunder överskrider det angivna värdet för kolumnen trunkeras strängen utan fel. |
| '12:12:12.1234567' | datetimeoffset(7) | 1900-01-01 12:12:12.1234567 +00:00 | Om precisionen för bråksekunder överskrider det angivna värdet för kolumnen trunkeras strängen utan fel. |