datetime (Transact-SQL)
Definisce una data costituita dalla combinazione di un'ora del giorno e di secondi frazionari ed espressa nel formato 24 ore.
[!NOTA]
Utilizzare i tipi di dati time, date, datetime2 e datetimeoffset per un nuovo lavoro. Questi tipi sono conformi allo standard SQL. e offrono una migliore portabilità. time, datetime2 e datetimeoffset offrono una maggiore precisione dei secondi, mentre datetimeoffset offre il supporto del fuso orario per le applicazioni distribuite globalmente.
Descrizione di datetime
Proprietà |
Valore |
---|---|
Sintassi |
datetime |
Utilizzo |
DECLARE @MyDatetime datetime CREATE TABLE Table1 ( Column1 datetime ) |
Formati predefiniti dei valori letterali stringa (utilizzati per client legacy) |
Non applicabile |
Intervallo di date |
1 gennaio 1753 - 31 dicembre 9999 |
Intervallo di ore |
Da 00:00:00 a 23:59:59.997 |
Intervallo di differenze di fuso orario |
Nessuno |
Intervalli di elementi |
AAAA rappresenta un numero di quattro cifre compreso tra 1753 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 3 e compreso tra 0 e 999, indicante i secondi frazionari. |
Lunghezza in caratteri |
Da 19 posizioni minimo a 23 massimo |
Dimensioni dello spazio di archiviazione |
8 byte |
Accuratezza |
Arrotondato a incrementi di 0,000, 0,003 o 0,007 secondi |
Valore predefinito |
1900-01-01 00:00:00 |
Calendario |
Gregoriano. Non è incluso l'intervallo completo di anni. |
Precisione in secondi frazionari definita dall'utente |
No |
Considerazione e conservazione delle differenze di fuso orario |
No |
Considerazione dell'ora legale |
No |
Formati di valore letterale stringa supportati per datetime
Nelle tabelle seguenti sono elencati i formati di valore letterale stringa supportati per datetime. I valori letterali stringa datetime sono compresi tra virgolette singole ('), ad esempio, 'string_literaL'. Fa eccezione ODBC. Se l'ambiente è diverso da us_english, i valori letterali stringa devono essere nel formato N'string_literaL'.
Espressione numerica |
Descrizione |
---|---|
Formati di data: [0]4/15/[19]96 -- (mga) [0]4-15-[19]96 -- (mga) [0]4.15.[19]96 -- (mga) [0]4/[19]96/15 -- (mag) 15/[0]4/[19]96 -- (gma) 15/[19]96/[0]4 -- (gam) [19]96/15/[0]4 -- (agm) [19]96/[0]4/15 -- (amg) Formati di ora: 14:30 14:30[:20:999] 14:30[:20.9] 4am 4 PM |
È possibile specificare i dati relativi alla data specificando il mese in formato numerico. Ad esempio, 5/20/97 rappresenta il ventesimo giorno di maggio 1997. Quando si utilizza il formato di data numerico, specificare il mese, il giorno e l'anno all'interno della stessa stringa utilizzando come separatori la barra (/), il segno meno (-) o il punto (.). Il formato corretto è il seguente:
Quando l'impostazione della lingua è us_english, l'ordine predefinito di visualizzazione della data è mga. È possibile modificare il formato di data utilizzando l'istruzione SET DATEFORMAT. L'impostazione dell'istruzione SET DATEFORMAT determina la modalità di interpretazione dei valori di data. Se l'ordine non corrisponde all'impostazione, i valori non vengono interpretati come date perché non compresi nell'intervallo valido oppure non vengono interpretati correttamente. La data 12/10/08 può ad esempio essere interpretata in sei modi diversi a seconda dell'impostazione di DATEFORMAT. Un anno in quattro parti è interpretato come anno. |
Espressione alfabetica |
Descrizione |
---|---|
Apr[ile] [15][,] 1996 Apr[ile] 15[,] [19]96 Apr[ile] 1996 [15] [15] Apr[ile][,] 1996 15 Apr[ile][,][19]96 15 [19]96 apr[ile] [15] 1996 apr[ile] 1996 APR[ILE] [15] 1996 [15] APR[ILE] |
È possibile specificare dati relativi alla data con il mese specificato con il nome completo. Ad esempio, aprile o l'abbreviazione del mese di aprile specificata nel linguaggio corrente. Le virgole sono facoltative e l'uso delle maiuscole è ignorato. Di seguito vengono riportate alcune linee guida per l'utilizzo dei formati di data alfabetici:
Quando si specifica il mese in formato alfabetico, l'impostazione SET DATEFORMAT della sessione non viene applicata. |
ISO 8601 |
Descrizione |
---|---|
AAAA-MM-GGThh:mm:ss [.mmm] AAAAMMGG[ hh:mm:ss[.mmm]] |
Esempi:
Per utilizzare il formato ISO 8601, è necessario specificare ogni elemento in tale formato, inclusi il carattere T, i due punti (:) e il punto (.) presenti nel formato. Le parentesi indicano che la frazione del componente dei secondi è facoltativa. Il componente dell'ora viene specificato nel formato 24 ore. T indica l'inizio della parte del valore datetime relativo all'ora. Il vantaggio dell'utilizzo del formato ISO 8601 consiste nel fatto che è uno standard internazionale con specifiche chiare. Inoltre, le impostazioni di SET DATEFORMAT o SET LANGUAGE non influiscono sul formato. |
Senza separatori |
Descrizione |
---|---|
AAAAMMGG hh:mm:ss[.mmm] |
ODBC |
Descrizione |
||||||||
---|---|---|---|---|---|---|---|---|---|
{ ts '1998-05-02 01:23:56.123' } { d '1990-10-02' } { t '13:33:41' } |
L'API ODBC definisce sequenze di escape per la rappresentazione dei valori di data e ora, che in ODBC sono denominati dati timestamp. Il formato timestamp di ODBC è inoltre supportato dalla definizione del linguaggio OLE DB (DBGUID-SQL) supportata dal provider Microsoft OLE DB per SQL Server. Nelle applicazioni che utilizzano API basate su ADO, OLE DB e ODBC è possibile utilizzare il formato timestamp ODBC per la rappresentazione di valori di data e ora. Il formato delle sequenze di escape del timestamp ODBC è il seguente: { literal_type 'constant_value' }:
|
Arrotondamento della precisione in secondi frazionari dei valori datetime
I valori datetime vengono arrotondati con incrementi di 0,000, 0,003 o 0,007 secondi, come illustrato nella tabella seguente.
Valore specificato dall'utente |
Valore archiviato dal sistema |
---|---|
01/01/98 23:59:59.999 |
1998-01-02 00:00:00.000 |
01/01/98 23:59:59.995 01/01/98 23:59:59.996 01/01/98 23:59:59.997 01/01/98 23:59:59.998 |
1998-01-01 23:59:59.997 |
01/01/98 23:59:59.992 01/01/98 23:59:59.993 01/01/98 23:59:59.994 |
1998-01-01 23:59:59.993 |
01/01/98 23:59:59.990 01/01/98 23:59:59.991 |
1998-01-01 23:59:59.990 |
Conformità agli standard ANSI e ISO 8601
datetime non è conforme agli standard ANSI o ISO 8601.
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 datetime in altri tipi di dati relativi a data e ora
Nella tabella seguente viene descritto il risultato della conversione di un tipo di dati datetime 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. Il componente relativo all'ora viene impostato su 00:00:00.000. Nel codice seguente vengono illustrati i risultati della conversione di un valore date in un valore datetime.
|
time(n) |
Il componente relativo all'ora viene copiato e quello relativo alla data viene impostato su '1900-01-01'. Quando la precisione frazionaria del valore time(n) è maggiore di tre cifre, il valore verrà troncato. Nell'esempio seguente vengono illustrati i risultati della conversione di un valore time(4) in un valore datetime.
|
smalldatetime |
Le ore e i minuti vengono copiati, mentre i secondi e i secondi frazionari vengono impostati su 0. Nel codice seguente vengono illustrati i risultati della conversione di un valore smalldatetime in un valore datetime.
|
datetimeoffset(n) |
I componenti relativi alla data e all'ora vengono copiati. Il fuso orario viene troncato. Quando la precisione frazionaria del valore datetimeoffset(n) è maggiore di tre cifre, il valore verrà troncato. Nell'esempio seguente vengono illustrati i risultati della conversione di un valore datetimeoffset(4) in un valore datetime.
|
datetime2(n) |
La data e l'ora vengono copiate. Quando la precisione frazionaria del valore datetime2(n) è maggiore di tre cifre, il valore verrà troncato. Nell'esempio seguente vengono illustrati i risultati della conversione di un valore datetime2(4) in un valore datetime.
|
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 |