datetime2 (Transact-SQL)
Definisce una data costituita dalla combinazione di un'ora del giorno espressa nel formato 24 ore. datetime2 può essere considerato un'estensione del tipo datetime esistente con un più ampio intervallo di date, una maggiore precisione frazionaria predefinita e una precisione specificata dall'utente facoltativa.
Descrizione di datetime2
Proprietà |
Valore |
---|---|
Sintassi |
datetime2 [ (fractional seconds precision) ] |
Utilizzo |
DECLARE @MyDatetime2 datetime2(7) CREATE TABLE Table1 ( Column1 datetime2(7) ) |
Formato predefinito dei valori letterali stringa (utilizzato per client legacy) |
AAAA-MM-GG hh:mm:ss[.secondi frazionari] 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 Da 1 gennaio 1 d.C. a 31 dicembre 9999 d.C |
Intervallo di ore |
Da 00:00:00 a 23:59:59.9999999 |
Intervallo di differenze di fuso orario |
Nessuno |
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 0 a 7 cifre e compreso tra 0 e 9999999, indicante i secondi frazionari. |
Lunghezza in caratteri |
Da un minimo di 19 posizioni (AAAA-MM-GG hh:mm:ss ) a un massimo di 27 posizioni (AAAA-MM-GG hh:mm:ss.0000000) |
Precisione, scala |
Da 0 a 7 cifre, con un'accuratezza di 100 nanosecondi. La precisione predefinita è 7 cifre. |
Dimensioni dello spazio di archiviazione |
6 byte per le precisioni minori di 3; 7 byte per le precisioni 3 e 4. Tutte le altre precisioni richiedono 8 byte. |
Accuratezza |
100 nanosecondi |
Valore predefinito |
1900-01-01 00:00:00 |
Calendario |
Gregoriano |
Precisione in secondi frazionari definita dall'utente |
Sì |
Considerazione e conservazione delle differenze di fuso orario |
No |
Considerazione dell'ora legale |
No |
Per i metadati del tipo di dati, vedere sys.systypes (Transact-SQL) o TYPEPROPERTY (Transact-SQL). Precisione e scala sono variabili per alcuni tipi di dati di data e ora. Per ottenere precisione e scala per una colonna, vedere COLUMNPROPERTY (Transact-SQL), COL_LENGTH (Transact-SQL) o sys.columns (Transact-SQL).
Formati di valore letterale stringa supportati per datetime2
Nelle tabelle seguenti sono elencati i formati di valore letterale stringa ISO 8601 e ODBC supportati per datetime2. Per informazioni sui formati alfabetico, numerico, non separato e ora per le parti di data e ora di datetime2, vedere date (Transact-SQL) e time (Transact-SQL).
ISO 8601 |
Descrizione |
---|---|
AAAA-MM-GGThh.mm.ss[. nnnnnnn] AAAA-MM-GGThh.mm.ss[. nnnnnnn] |
Su questo formato non influiscono le impostazioni locali delle sessioni SET LANGUAGE e SET DATEFORMAT. Il carattere T, i due punti (:) e il punto (.) sono inclusi nel valore letterale stringa, ad esempio '2007-05-02T19:58:47.1234567'. |
ODBC |
Descrizione |
---|---|
{ ts 'aaaa-mm-gg hh:mm:ss[.secondi frazionari]' } |
Specifico delle API ODBC:
|
Conformità agli standard ANSI e ISO 8601
La conformità agli standard ANSI e ISO 8601 di date e time è applicata a datetime2.
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 2012 |
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 datetime2 in altri tipi di dati relativi a data e ora
Nella tabella seguente viene descritto il risultato della conversione di un tipo di dati datetime2 in altri tipi di dati relativi a data e ora.
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 datetime2(4) in un valore date.
|
time(n) |
L'ora, il minuto, il secondo e i secondi frazionari vengono copiati se la scala è uguale e arrotondati se la scala è differente. Nel codice seguente vengono illustrati i risultati della conversione di un valore datetime2(4) in un valore time(3).
|
datetime |
I valori della data e dell'ora vengono copiati. Quando la precisione frazionaria del valore datetime(n) è maggiore di tre cifre, il valore viene troncato. Nel codice seguente vengono illustrati i risultati della conversione di un valore datetime2 in un valore datetime.
|
smalldatetime |
La data e le ore vengono copiate. I minuti vengono arrotondati rispetto ai secondi e i secondi vengono impostati su 0. Nel codice seguente vengono illustrati i risultati della conversione di un valore datetime2 in un valore smalldatetime.
|
datetimeoffset(n) |
Il valore datetime2(n) viene copiato nel valore datetimeoffset(n). La differenza di fuso orario viene impostata su +00:0. Se la precisione del valore datetime2(n) è maggiore di quella del valore datetimeoffset(n), il primo valore viene arrotondato. Nel codice seguente vengono illustrati i risultati della conversione di un valore datetime2(5) in un valore datetimeoffset(3).
|
Conversione di valori letterali stringa nel tipo di dati datetime2
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 datetime2.
Valore letterale stringa di input |
datetime2(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 datetime2 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. |
solo TIME |
Il valore predefinito per la parte di DATE è 1900-1-1. |
solo TIMEZONE |
Vengono forniti i valori predefiniti. |
DATE + TIME |
Semplice |
DATE + TIMEZONE |
Non consentiti. |
TIME + TIMEZONE |
Il valore predefinito per la parte di DATE è 1900-1-1. L'input TIMEZONE viene ignorato. |
DATE + TIME + TIMEZONE |
Verrà utilizzato DATETIME locale. |
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';
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 |