time (Transact-SQL)
Definisce l'ora di un giorno. Il fuso orario non viene preso in considerazione e il formato è basato sulle 24 ore.
Si applica a: SQL Server (da SQL Server 2008 alla versione corrente), Database SQL di Windows Azure (dalla versione iniziale alla versione corrente). |
Descrizione di time
Proprietà |
Valore |
||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Sintassi |
time [ (fractional second precision) ] |
||||||||||||||||||||||||||||||||||||||||
Utilizzo |
DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) ) |
||||||||||||||||||||||||||||||||||||||||
fractional seconds precision |
Specifica il numero di cifre per la parte frazionaria dei secondi. Può essere un numero intero compreso tra 0 e 7. La precisione frazionaria predefinita è 7 (100 ns). |
||||||||||||||||||||||||||||||||||||||||
Formato predefinito dei valori letterali stringa (utilizzato per client legacy) |
hh.mm.ss[. nnnnnnn] Per ulteriori informazioni, vedere la sezione seguente relativa alla compatibilità con le versioni precedenti per i client legacy. |
||||||||||||||||||||||||||||||||||||||||
Intervallo |
da 00.00.00.0000000 a 23.59.59.9999999 |
||||||||||||||||||||||||||||||||||||||||
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. |
||||||||||||||||||||||||||||||||||||||||
Lunghezza in caratteri |
da 8 posizioni minimo (hh.mm.ss) a 16 massimo (hh.mm.ss.) nnnnnnn) |
||||||||||||||||||||||||||||||||||||||||
Precisione, scala (l'utente specifica solo la scala) |
|
||||||||||||||||||||||||||||||||||||||||
Dimensioni dello spazio di archiviazione |
5 byte, fisso è l'impostazione predefinita con la precisione in secondi frazionari predefinita pari a 100 ns. |
||||||||||||||||||||||||||||||||||||||||
Accuratezza |
100 nanosecondi |
||||||||||||||||||||||||||||||||||||||||
Valore predefinito |
00:00:00 Questo valore viene utilizzato per la parte relativa al tempo 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 |
Formati di valore letterale stringa supportati per l'ora
Nella tabella seguente sono mostrati 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] |
|
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
Alcuni client legacy 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 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
Nella conversione di tipi di dati relativi alla data e all'ora, in SQL Server vengono rifiutati tutti i valori non riconosciuti come date o orari. Per informazioni sull'utilizzo 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 tabella seguente viene descritto il risultato della conversione di un tipo di dati time in altri tipi di dati relativi a data e ora.
Tipo di dati in cui viene eseguita la conversione |
Dettagli relativi alla conversione |
---|---|
time(n) |
L'ora, il minuto e i secondi vengono copiati. 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).
|
date |
La conversione non viene eseguita e viene generato il messaggio di errore 206: "Conflitto del tipo di operando: date è incompatibile con time". |
datetime |
I valori dell'ora, dei minuti e dei secondi vengono copiati e il componente relativo alla 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 verrà troncato. Nel codice seguente vengono illustrati i risultati della conversione di un valore time(4) in un valore datetime.
|
smalldatetime |
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.
|
datetimeoffset(n) |
L'ora viene copiata e la data viene impostata su '1900-01-01'. 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).
|
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).
|
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 provocheranno 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
A.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. |