datetimeoffset (Transact-SQL)
Definisce una data in combinazione con un'ora del giorno con considerazione del fuso orario ed espressa nel formato 24 ore.
Si applica a: SQL Server (SQL Server 2008 tramite versione corrente), Database SQL di Windows Azure (versione iniziale tramite versione corrente). |
Descrizione di datetimeoffset
Proprietà |
Valore |
||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Sintassi |
datetimeoffset [ (fractional seconds precision) ] |
||||||||||||||||||||||||||||||||||||||||
Utilizzo |
DECLARE @MyDatetimeoffset datetimeoffset(7) CREATE TABLE Table1 ( Column1 datetimeoffset(7) ) |
||||||||||||||||||||||||||||||||||||||||
Formati predefiniti per i valori letterali stringa (utilizzati per il client legacy) |
AAAA-MM-GG hh.mm.ss[. nnnnnnn] [{+|-}hh.mm] Per ulteriori informazioni, vedere la sezione seguente relativa alla compatibilità con le versioni precedenti per i client legacy. |
||||||||||||||||||||||||||||||||||||||||
Intervallo di date |
Da 01-01-0001 a 31-12-9999 dall'1 gennaio 1 D.C. al 31 dicembre 9999 D.C. |
||||||||||||||||||||||||||||||||||||||||
Intervallo di ore |
da 00:00:00 a 23:59:59.9999999 |
||||||||||||||||||||||||||||||||||||||||
Intervallo di differenze di fuso orario |
Da -14:00 a +14:00 |
||||||||||||||||||||||||||||||||||||||||
Intervalli di elementi |
AAAA rappresenta un numero di quattro cifre compreso tra 0001 e 9999 indicante l'anno. MM rappresenta un numero di due cifre compreso tra 01 e 12 indicante un mese dell'anno specificato. GG rappresenta un numero di due cifre compreso tra 01 e 31, a seconda del mese, indicante il giorno del mese specificato. hh rappresenta un numero di due cifre compreso tra 00 e 23 indicante l'ora. mm rappresenta un numero di due cifre compreso tra 00 e 59 indicante i minuti. ss rappresenta un numero di due cifre compreso tra 00 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. hh rappresenta un numero di due cifre compreso tra -14 e +14. mm rappresenta un numero di due cifre compreso tra 00 e 59. |
||||||||||||||||||||||||||||||||||||||||
Lunghezza in caratteri |
Da un minimo di 26 posizioni (AAAA-MM-GG hh.mm.ss {+|-}hh.mm) a un massimo di 34 (AAAA-MM-GG hh.mm.ss.nnnnnnn {+|-}hh.mm) nnnnnnn {+|-}hh.mm) |
||||||||||||||||||||||||||||||||||||||||
Precisione, scala |
|
||||||||||||||||||||||||||||||||||||||||
Dimensioni dello spazio di archiviazione |
10 byte, fissa è l'impostazione predefinita con l'impostazione predefinita di 100 ns di precisione in secondi frazionari. |
||||||||||||||||||||||||||||||||||||||||
Accuratezza |
100 nanosecondi |
||||||||||||||||||||||||||||||||||||||||
Valore predefinito |
1900-01-01 00:00:00 00:00 |
||||||||||||||||||||||||||||||||||||||||
Calendario |
Gregoriano |
||||||||||||||||||||||||||||||||||||||||
Precisione in secondi frazionari definita dall'utente |
Sì |
||||||||||||||||||||||||||||||||||||||||
Considerazione e conservazione delle differenze di fuso orario |
Sì |
||||||||||||||||||||||||||||||||||||||||
Considerazione dell'ora legale |
No |
Formati di valore letterale stringa supportati per datetimeoffset
Nella tabella seguente sono elencati i formati di valore letterale stringa ISO 8601 supportati per datetimeoffset. Per informazioni sui formati alfabetico, numerico, non separato e ora per le parti della data e dell'ora di datetimeoffset, vedere date (Transact-SQL) and time (Transact-SQL).
ISO 8601 |
Descrizione |
---|---|
AAAA-MM-GGThh.mm.ss[. nnnnnnn][{+|-}hh.mm] |
Su questi due formati non influiscono le impostazioni locali delle sessioni SET LANGUAGE e SET DATEFORMAT. Non sono consentiti spazi tra datetimeoffset e datetime. |
AAAA-MM-GGThh.mm.ss[. nnnnnnn]Z (UTC) |
In base alla definizione ISO questo formato indica che la parte datetime deve essere espressa in formato UTC (Coordinated Universal Time). Ad esempio, 1999-12-12 12:30:30.12345 -07: 00 deve essere rappresentata come 1999-12-12 19:30:30.12345Z. |
Differenza di fuso orario
Una differenza di fuso orario specifica la differenza di fuso orario rispetto all'ora UTC per un valore time o datetime. La differenza di fuso orario può essere rappresentata nel formato [+|-] hh:mm:
hh è un numero di due cifre, compreso tra 00 e 14, che rappresenta il numero di ore della differenza di fuso orario.
mm è un numero di due cifre, compreso tra 00 e 59, che rappresenta il numero di minuti aggiuntivi della differenza di fuso orario.
+ (più) o - (meno) è il segno obbligatorio per la differenza di fuso orario. Indica se la differenza di fuso orario viene aggiunta o sottratta dall'ora UTC per ottenere l'ora locale. L'intervallo valido per la differenza di fuso orario va da -14:00 a +14:00.
L'intervallo di differenza di fuso orario segue lo standard XML W3C per la definizione di schemi XSD, leggermente diverso dalla definizione standard di SQL 2003, da 12:59 a +14:00.
Il parametro facoltativo fractional seconds precision specifica il numero di cifre per la parte relativa ai secondi frazionari. Questo valore può essere un numero intero con un numero di cifre compreso tra 0 e 7 (100 nanosecondi). Il valore predefinito di fractional seconds precision è 100 ns (sette cifre per la parte relativa ai secondi frazionari).
I dati sono archiviati nel database ed elaborati, confrontati, ordinati e indicizzati nel server come in UTC. La differenza di fuso orario viene mantenuta nel database per il recupero.
La differenza di fuso orario specificata deve essere sensibile all'ora legale e regolata sui valori di datetime appartenenti al periodo in cui è in vigore l'ora legale.
Per il tipo datetimeoffset, i valori datetime UTC e locali (per la differenza di fuso orario persistente o convertita), vengono convalidati durante le operazioni aritmetiche e di inserimento, aggiornamento, conversione o assegnazione. Il rilevamento di qualsiasi valore datetime UTC o locale (per la differenza di fuso orario persistente o convertita) non valido genera un errore "Valore non valido". Ad esempio, 9999-12-31 10:10:00 è valido in UTC ma causa overflow nell'ora locale per la differenza di fuso orario +13:50.
Conformità agli standard ANSI e ISO 8601
Le sezioni sulla conformità agli standard ANSI e ISO 8601 degli argomenti date e time si applicano a datetimeoffset.
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)
Tipo di dati in cui viene eseguita la conversione |
Dettagli relativi alla conversione |
---|---|
date |
Il giorno, il mese e l'anno vengono copiati. Nel codice seguente vengono illustrati i risultati della conversione di un valore datetimeoffset(4) in un valore date.
|
time(n) |
L'ora, il minuto, il secondo e i secondi vengono copiati. Il valore del fuso orario viene troncato. Se la precisione del valore datetimeoffset(n) è maggiore di quella del valore time(n), il primo valore viene arrotondato. Nel codice seguente vengono illustrati i risultati della conversione di un valore datetimeoffset(4) in un valore time(3).
|
datetime |
Il valori della data e dell'ora vengono copiati, mentre fuso orario viene troncato. Quando la precisione frazionaria del valore datetimeoffset(n) è maggiore di tre cifre, il valore viene troncato. Nel codice seguente vengono illustrati i risultati della conversione di un valore datetimeoffset(4) in un valore datetime.
|
smalldatetime |
La data e le ore vengono copiate, i minuti vengono arrotondati rispetto al valore dei secondi e i secondi vengono impostati su 0. Nel codice seguente vengono illustrati i risultati della conversione di un valore datetimeoffset(3) in un valore smalldatetime.
|
datetime2(n) |
La data e l'ora vengono copiate nel valore datetime2, mentre il fuso orario viene troncato. Se la precisione del valore datetime2(n) è maggiore di quella del valore datetimeoffset(n), i secondi frazionari vengono troncati. Nel codice seguente vengono illustrati i risultati della conversione di un valore datetimeoffset(4) in un valore datetime2(3).
|
Conversione del tipo di dati datetimeoffset in altri tipi di dati relativi a data e ora
Nella tabella seguente viene descritto il risultato della conversione di un tipo di dati datetimeoffset in altri tipi di dati relativi a data e ora.
Conversione di valori letterali stringa nel tipo di dati datetimeoffset
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 datetimeoffset.
Valore letterale stringa di input |
datetimeoffset(n) |
---|---|
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 datetimeoffset provocheranno una conversione implicita tra datetime e questo tipo in base a quanto definito dalle regole di conversione. |
ODBC TIME |
Vedere la regola relativa a ODBC DATE. |
ODBC DATETIME |
Vedere la regola relativa a ODBC DATE. |
Solo DATE |
Il valore predefinito per la parte di TIME è 00:00:00. Il valore predefinito di TIMEZONE è +00:00:00. |
solo TIME |
Il valore predefinito per la parte di DATE è 1900-1-1. Il valore predefinito di TIMEZONE è +00:00. |
solo TIMEZONE |
Vengono forniti i valori predefiniti. |
DATE + TIME |
Il valore predefinito di TIMEZONE è +00:00:00. |
DATE + TIMEZONE |
Non consentiti |
TIME + TIMEZONE |
Il valore predefinito per la parte di DATE è 1900-1-1. |
DATE + TIME + TIMEZONE |
Semplice |
Esempi
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'
,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetimeoffset(7)) AS
'datetimeoffset IS08601';
Set di risultati:
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 |