datetimeoffset (Transact-SQL)

Definisce una data in combinazione con un'ora del giorno con considerazione del fuso orario ed espressa nel formato 24 ore.

Per una panoramica di tutti i tipi di dati e delle funzioni di data e ora Transact-SQL, vedere Funzioni di data e ora (Transact-SQL). Per informazioni ed esempi comuni ai tipi di dati e alle funzioni di data e ora, vedere Utilizzo di dati relativi a data e ora.

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 relativa alla compatibilità con le versioni precedenti per i client legacy nell'argomento Utilizzo di dati relativi a data e ora.

Intervallo di date

da 0001-01-01 a 9999-12-31

dal 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)

Precisione, scala

Scala specificataRisultato (precisione, scala)Lunghezza della colonna (byte)Precisione in secondi frazionari
datetimeoffset (34,7)107
datetimeoffset(0) (26,0)80-2
datetimeoffset(1) (28,1)80-2
datetimeoffset(2) (29,2)80-2
datetimeoffset(3) (30,3)93-4
datetimeoffset(4) (31,4)93-4
datetimeoffset(5) (32,5)105-7
datetimeoffset(6) (33,6)105-7
datetimeoffset(7) (34,7)105-7

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

Considerazione e conservazione delle differenze di fuso orario

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) e 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.

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