time (Transact-SQL)
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics Platform System (PDW) in Microsoft Fabric Warehouse nel database SQL di Microsoft Fabric in Microsoft Fabric
Definisce l'ora di un giorno. Il fuso orario non viene preso in considerazione e il formato è basato sulle 24 ore.
Nota
Le informazioni Informatica vengono specificate per i clienti PDW che usano il connettore di Informatica.
Descrizione di time
Proprietà | valore |
---|---|
Sintassi | time [ (fractional seconds scale) ] |
Utilizzo | DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) ) |
fractional seconds scale | Specifica il numero di cifre per la parte frazionaria dei secondi. Può essere un numero intero compreso tra 0 e 7. Per Informatica, può essere un numero intero compreso tra 0 e 3. La scala frazionaria predefinita è 7 (100 ns). In Microsoft Fabric può essere un numero intero compreso tra 0 e 6, senza impostazione predefinita. La precisione deve essere specificata in Microsoft Fabric. |
Formato predefinito dei valori letterali stringa (utilizzato per client legacy) |
hh:mm:ss[.nnnnnnn] per Informatica) Per altre informazioni, vedere la sezione Compatibilità con le versioni precedenti dei client legacy. |
Intervallo | da 00:00:00.0000000 a 23:59:59.9999999 (da 00:00:00.000 a 23:59:59.999 per Informatica) |
Intervalli di elementi | hh rappresenta un numero di due cifre tra 0 e 23 indicante l'ora. mm rappresenta un numero di due cifre tra 0 e 59 indicante i minuti. ss rappresenta un numero di due cifre tra 0 e 59 indicante i secondi. n* rappresenta un numero composto da un numero di cifre da 0 a 7 e compreso tra 0 e 9999999, indicante i secondi frazionari. Per Informatica, n* è un numero composto da un numero di cifre da zero a tre, compreso tra 0 e 999. |
Lunghezza in caratteri | da 8 posizioni minimo (hh:mm:ss) a 16 massimo (hh:mm:ss.nnnnnnn). Per Informatica, il massimo è 12 (hh:mm:ss.nnn). |
Precisione, scala (l'utente specifica solo la scala) |
Vedere la tabella riportata di seguito. |
Dimensioni dello spazio di archiviazione | 5 byte, fisso è l'impostazione predefinita con la precisione in secondi frazionari predefinita pari a 100 ns. In Informatica il valore predefinito è 4 byte, fisso con una precisione in secondi frazionari predefinita di 1 ms. |
Precisione | 100 nanosecondi (1 millisecondo in Informatica) |
Default value | 00:00:00 Questo valore viene usato per la parte relativa all'orario aggiunta per la conversione implicita da date a datetime2 o datetimeoffset. |
Precisione in secondi frazionari definita dall'utente | Sì |
Considerazione e conservazione delle differenze di fuso orario | No |
Considerazione dell'ora legale | No |
Scala specificata | Risultato (precisione, scala) | Lunghezza della colonna (byte) | Precisione seconds precisione |
---|---|---|---|
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 |
* Non supportato in Informatica.
+ Non supportato in Microsoft Fabric.
Formati di valore letterale stringa supportati per l'ora
Nella tabella seguente sono riportati i formati di valore letterale stringa validi per il tipo di dati time.
SQL Server | Descrizione |
---|---|
hh:mm [: ss][:secondi frazionari][AM][PM] hh:mm [: ss].secondi frazionari][AM][PM] hhAM[PM] hh AM [PM] |
Il valore relativo all'ora 0 rappresenta l'ora dopo mezzanotte (AM), indipendentemente dall'indicazione AM. Non è possibile specificare PM quando l'ora è uguale a 0. I valori di ora compresi tra 01 e 11 rappresentano le ore antimeridiane (prima di mezzogiorno) se non si specifica né AM né PM. Se si specifica AM, i valori indicano le ore prima di mezzogiorno, mentre rappresentano le ore postmeridiane (dopo mezzogiorno) se si specifica PM. Il valore di ora 12 rappresenta l'ora che inizia a mezzogiorno se non si specifica né AM né PM. Rappresenta invece l'ora che inizia a mezzanotte se si specifica AM e l'ora che inizia a mezzogiorno se si specifica PM. Ad esempio, 12:01 indica un minuto dopo mezzogiorno, così come 12:01 PM, mentre 12:01 AM indica un minuto dopo la mezzanotte. 12:01 AM equivale a 00:01 o 00:01 AM. I valori di ora compresi tra 13 e 23 rappresentano le ore postmeridiane se non si specifica né AM né PM e le ore postmeridiane se si specifica PM. Non è possibile specificare AM per valori di ora compresi tra 13 e 23. Un valore relativo all'ora 24 non è valido. Per indicare la mezzanotte, utilizzare 12:00 AM o 00:00. È possibile far precedere i millisecondi dai due punti (:) o da un punto (.). Se si utilizzano i due punti, il valore indica i millesimi di secondo. Un valore preceduto da un punto indica i decimi di secondo se è composto da una sola cifra, i centesimi di secondo se è composto da due cifre e i millesimi di secondo se è composto da tre cifre. Ad esempio, 12:30:20:1 indica che sono trascorsi 20 secondi e un millesimo di secondo dalle 12:30, mentre 12:30:20.1 indica che sono trascorsi venti secondi e un decimo di secondo dalle 12:30. |
ISO 8601 | Note |
---|---|
hh:mm:ss hh:mm[:ss][.secondi frazionari] |
hh è un numero di due cifre, compreso tra 0 e 23, che rappresenta il numero di ore nella differenza di fuso orario. mm è un numero di due cifre, tra 0 e 59, che rappresenta il numero di minuti aggiuntivi della differenza di fuso orario. |
ODBC | Note |
---|---|
{t 'hh.mm.ss[.secondi frazionari]'} | Specifico delle API ODBC |
Conformità agli standard ANSI e ISO 8601
L'utilizzo dell'ora 24 per indicare la mezzanotte e del secondo del salto a 59 come definito dall'ISO 8601(5.3.2 e 5.3) non è supportato per essere compatibile con i tipi di data ed ora esistenti.
Il formato predefinito dei valori letterali stringa utilizzato per i client legacy risulterà compatibile con il formato standard SQL, definito come hh:mm:ss[.nnnnnnn]. Questo formato assomiglia alla definizione ISO 8601 per TIME che esclude i secondi frazionari.
Compatibilità con le versioni precedenti dei client legacy
Alcune versioni precedenti dei client non supportano i tipi di dati time, date, datetime2 e datetimeoffset. Nella tabella seguente viene illustrato il mapping del tipo tra un'istanza di livello principale di SQL Server e i client legacy.
Tipo di dati di SQL Server | Formato predefiniti dei valori letterali stringa passati al client legacy | ODBC delle versioni precedenti | OLEDB delle versioni precedenti | JDBC delle versioni precedenti | SQLCLIENT delle versioni precedenti |
---|---|---|---|---|---|
time | hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR o SQL_VARCHAR | DBTYPE_WSTR o DBTYPE_STR | Java.sql.String | Stringa o SqString |
date | YYYY-MM-DD | SQL_WVARCHAR o SQL_VARCHAR | DBTYPE_WSTR o DBTYPE_STR | Java.sql.String | Stringa o SqString |
datetime2 | AAAA-MM-GG hh:mm:ss[.nnnnnnn] | SQL_WVARCHAR o SQL_VARCHAR | DBTYPE_WSTR o DBTYPE_STR | Java.sql.String | Stringa o SqString |
datetimeoffset | AAAA-MM-GG hh:mm:ss[.nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR o SQL_VARCHAR | DBTYPE_WSTR o DBTYPE_STR | Java.sql.String | Stringa o SqString |
Conversione dei dati relativi alla data e all'ora
Quando si esegue la conversione in tipi di dati data e ora, SQL Server rifiuta tutti i valori che non può riconoscere come date o ore. Per informazioni sull'uso delle funzioni CAST e CONVERT con i dati relativi a data e ora, vedere CAST e CONVERT (Transact-SQL)
Conversione del tipo di dati time(n) in altri tipi di dati relativi a data e ora
Nella sezione seguente viene descritto il risultato della conversione di un tipo di dati time in altri tipi di dati relativi a data e ora.
Nel caso della conversione in time(n) vengono copiate le ore, i minuti e i secondi. Quando la precisione della destinazione è minore di quella dell'origine, i secondi frazionari verranno arrotondati per rispettare la precisione della destinazione. Nell'esempio seguente vengono illustrati i risultati della conversione di un valore time(4)
in un valore time(3)
.
DECLARE @timeFrom TIME(4) = '12:34:54.1237';
DECLARE @timeTo TIME(3) = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
Il set di risultati è il seguente.
time(3) time(4)
------------ -------------
12:34:54.124 12:34:54.1237
Se la conversione è in data, la conversione non riesce e viene generato il messaggio di errore 206: "Conflitto di tipo operando: data non compatibile con l'ora".
Quando viene eseguita la conversione in datetime, vengono copiati i valori di ore, minuti e secondi e il componente della data viene impostato su "1900-01-01". Quando la precisione dei secondi frazionari del valore time(n) è maggiore di tre cifre, il risultato di datetime viene troncato. Nel codice seguente vengono illustrati i risultati della conversione di un valore time(4)
in un valore datetime
.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime DATETIME = @time;
SELECT @time AS '@time', @datetime AS '@datetime';
Il set di risultati è il seguente.
@time @datetime
------------- -----------------------
12:15:04.1237 1900-01-01 12:15:04.123
Quando viene eseguita la conversione insmalldatetime, la data viene impostata su "1900-01-01" e i valori dell'ora e dei minuti vengono arrotondati, mentre i secondi e i secondi frazionari vengono impostati su 0. Nel codice seguente vengono illustrati i risultati della conversione di un valore time(4)
in un valore smalldatetime
.
Mostra arrotondamento del valore del minuto:
DECLARE @time TIME(4) = '12:15:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Il set di risultati è il seguente.
@time @smalldatetime
---------------- -----------------------
12:15:59.9999 1900-01-01 12:16:00--
Mostra arrotondamento del valore dell'ora:
DECLARE @time TIME(4) = '12:59:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Il set di risultati è il seguente.
@time @smalldatetime
---------------- -----------------------
12:59:59.9999 1900-01-01 13:00:00
Se viene eseguita la conversione in datetimeoffset(n), la data viene impostata su "1900-01-01" e l'ora viene copiata. La differenza di fuso orario è impostata su +00:00. Quando la precisione dei secondi frazionari del valore time(n) è maggiore di quella del valore datetimeoffset(n), la prima precisione verrà arrotondata per rispettare la seconda. Nell'esempio seguente vengono illustrati i risultati della conversione di un valore time(4)
in un tipo datetimeoffset(3)
.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetimeoffset DATETIMEOFFSET(3) = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
Il set di risultati è il seguente.
@time @datetimeoffset
------------- ------------------------------
12:15:04.1237 1900-01-01 12:15:04.124 +00:00
Quando viene eseguita la conversione in datetime2(n), la data viene impostata su "1900-01-01", il componente relativo all'ora viene copiato e la differenza di fuso orario viene impostata su 00:00. Quando la precisione dei secondi frazionari del valore datetime2(n) è maggiore di quella del valore time(n), la prima precisione verrà arrotondata per rispettare la seconda. Nell'esempio seguente vengono illustrati i risultati della conversione di un valore time(4)
in un valore datetime2(2)
.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime2 DATETIME2(3) = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
Il set di risultati è il seguente.
@datetime2 @time
----------------------- -------------
1900-01-01 12:15:04.124 12:15:04.1237
Conversione di valori letterali stringa nel tipo di dati time(n)
Le conversioni da valori letterali stringa a tipi di data e ora sono consentite se tutte le parti delle stringhe hanno formati validi. In caso contrario, viene generato un errore di runtime. Le conversioni implicite o esplicite che non specificano uno stile, dai tipi di data e ora ai valori letterali stringa, saranno nel formato predefinito della sessione corrente. Nella tabella seguente vengono illustrate le regole per la conversione di un valore letterale stringa nel tipo di dati time.
Valore letterale stringa di input | Regola di conversione |
---|---|
ODBC DATE | Viene eseguito il mapping dei valori letterali stringa ODBC al tipo di dati datetime. Tutte le operazione di assegnazione dai valori letterali di ODBC DATETIME in tipi time determineranno una conversione implicita tra datetime e questo tipo in base a quanto definito dalle regole di conversione. |
ODBC TIME | Vedere la regola per ODBC DATE descritta in precedenza. |
ODBC DATETIME | Vedere la regola per ODBC DATE descritta in precedenza. |
Solo DATE | Vengono forniti i valori predefiniti. |
solo TIME | Semplice |
solo TIMEZONE | Vengono forniti i valori predefiniti. |
DATE + TIME | Viene utilizzata la parte di TIME della stringa di input. |
DATE + TIMEZONE | Non consentiti. |
TIME + TIMEZONE | Viene utilizzata la parte di TIME della stringa di input. |
DATE + TIME + TIMEZONE | Verrà utilizzata la parte TIME di DATETIME locale. |
Esempi
R. Confronto dei tipi di dati di data e ora
Nell'esempio seguente vengono confrontati i risultati dell'esecuzione del cast di una stringa ai tipi di dati date e time.
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';
Tipo di dati | 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. Inserimento dei valori letterali stringa dell'ora validi in una colonna time(7)
Nella tabella seguente sono elencati i diversi valori letterali stringa che possono essere inseriti in una colonna del tipo di dati time(7) con i valori che sono archiviati in tale colonna.
Tipo di formato dei valori letterali stringa | Valore letterale stringa inserito | Valore time(7) archiviato | Descrizione |
---|---|---|---|
SQL Server | 01:01:01:123AM | 01:01:01.1230000 | Se prima della precisione frazionaria dei secondi vengono utilizzati i due punti (:), la scala non può superare tre posizioni o verrà generato un errore. |
SQL Server | '01:01:01.1234567 AM' | 01:01:01.1234567 | Quando si specificano AM o PM, l'ora viene archiviata in formato di 24 ore senza l'AM o il PM letterale. |
SQL Server | '01:01:01.1234567 PM' | 13:01:01.1234567 | Quando si specificano AM o PM, l'ora viene archiviata in formato di 24 ore senza l'AM o il PM letterale. |
SQL Server | '01:01:01.1234567PM' | 13:01:01.1234567 | Lo spazio prima dell'indicazione AM o PM è facoltativo. |
SQL Server | '01AM' | 01:00:00.0000000 | Quando viene specificata solo l'ora, tutti gli altri valori sono uguali a 0. |
SQL Server | '01 AM' | 01:00:00.0000000 | Lo spazio prima dell'indicazione AM o PM è facoltativo. |
SQL Server | '01:01:01' | 01:01:01.0000000 | Quando la precisione frazionaria dei secondi non è specificata, ogni posizione definita dal tipo di dati è 0. |
ISO 8601 | '01:01:01.1234567' | 01:01:01.1234567 | Per essere conforme allo standard ISO 8601, utilizzare il formato delle 24 ore, non AM o PM. |
ISO 8601 | '01:01:01.1234567 +01:01' | 01:01:01.1234567 | La differenza del fuso orario facoltativa (TZD) è consentita nell'input ma non viene archiviata. |
C. Inserimento del valore letterale stringa nelle colonne di ogni tipo di dati relativi a data e ora
Nella tabella seguente la prima colonna indica il valore letterale stringa dell'ora da inserire nella colonna della tabella del database della data o dell'ora visualizzate nella seconda colonna. La terza colonna indica il valore che verrà memorizzato nella colonna della tabella del database.
Valore letterale stringa inserito | Tipo di dati colonna | Valore archiviato nella colonna | Descrizione |
---|---|---|---|
'12:12:12.1234567' | time(7) | 12:12:12.1234567 | Se la precisione frazionaria dei secondi supera il valore specificato per la colonna, la stringa sarà troncata senza errori. |
'2007-05-07' | date | NULL | Qualsiasi valore dell'ora genererà un errore nell'istruzione INSERT |
'12:12:12' | smalldatetime | 1900-01-01 12:12:00 | Qualsiasi valore della precisione frazionaria dei secondi genererà un errore nell'istruzione INSERT. |
'12:12:12.123' | datetime | 1900-01-01 12:12:12.123 | Qualsiasi precisione dei secondi maggiore di tre posizioni genera un errore nell'espressione INSERT. |
'12:12:12.1234567' | datetime2(7) | 1900-01-01 12:12:12.1234567 | Se la precisione frazionaria dei secondi supera il valore specificato per la colonna, la stringa sarà troncata senza errori. |
'12:12:12.1234567' | datetimeoffset(7) | 1900-01-01 12:12:12.1234567 +00:00 | Se la precisione frazionaria dei secondi supera il valore specificato per la colonna, la stringa sarà troncata senza errori. |