datetime (Transact-SQL)
Si applica a: SQL Server Azure SQL Database
Istanza gestita di SQL di Azure
Azure Synapse Analytics Analytics
Platform System (PDW)
Definisce una data costituita dalla combinazione di un'ora del giorno e di secondi frazionari ed espressa nel formato 24 ore.
Nota
Usare i tipi di dati time, date, datetime2 e datetimeoffset per la creazione di nuovo codice. Questi tipi sono conformi allo standard SQL. e offrono una migliore portabilità. time, datetime2 e datetimeoffset offrono una maggiore precisione dei secondi. datetimeoffset offre il supporto del fuso orario per le applicazioni distribuite globalmente.
Descrizione
Proprietà | valore |
---|---|
Sintassi | datetime |
Uso | DECLARE @MyDatetime datetime CREATE TABLE Table1 ( Column1 datetime ) |
Formati predefiniti dei valori letterali stringa (utilizzato per client legacy) |
Non applicabile |
Intervallo di date | Da 01.01.53 a 31.12.99 |
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 include 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. Fatta eccezione per ODBC, i valori letterali stringa datetime sono compresi tra virgolette singole ('), ad esempio, 'string_literaL'. Se l'ambiente è diverso da us_english, i valori letterali stringa devono essere nel formato N'string_literaL'.
Numeric | 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: numero separatore numero separatore numero[ora] [ora] Quando l'impostazione della lingua è us_english, l'ordine predefinito di visualizzazione della data è mga. È possibile modificare il formato di data mediante 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. Le date non in ordine potrebbero essere erroneamente interpretate come fuori intervallo o con valori errati. 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: 1) Racchiudere data e ora tra virgolette singole ('). Per le lingue diverse dall'inglese, utilizzare N' 2) I caratteri inclusi tra parentesi sono facoltativi. 3) Se si specificano solo le ultime due cifre dell'anno, i valori minori delle ultime due cifre del valore impostato nell'opzione di configurazione Cambio data per anno a due cifre vengono interpretati come appartenenti allo stesso secolo dell'anno di cambio data. I valori maggiori o uguali al valore di questa opzione vengono interpretati come appartenenti al secolo che precede l'anno di cambio data. Se ad esempio il valore di Cambio data per anno a due cifre è 2050 (impostazione predefinita), 25 viene interpretato come 2025 mentre 50 viene interpretato come 1950. Per evitare ambiguità, esprimere gli anni nel formato a quattro cifre. 4) Se manca il giorno, viene inserito il primo giorno del mese. Quando si specifica il mese in formato alfabetico, l'impostazione di SET DATEFORMAT della sessione non viene applicata. |
ISO 8601 | Descrizione |
---|---|
AAAA-MM-GGThh:mm:ss [.mmm] AAAAMMGG[ hh:mm:ss[.mmm]] |
Esempi: 1) 2004-05-23T14:25:10 2) 2004-05-23T14:25:10.487 Per usare il formato ISO 8601 è necessario specificare ogni elemento in tale formato, includendo il carattere T, i due punti (:) e il punto (.) in esso presenti. Le parentesi indicano che la frazione del componente dei secondi è facoltativa. Il componente dell'ora viene specificato nel formato 24 ore. Il carattere T indica l'inizio della parte dell'ora del valore datetime. Il vantaggio dell'utilizzo del formato ISO 8601 consiste nel fatto che è uno standard internazionale con specifiche chiare. L'impostazione di SET DATEFORMAT o SET LANGUAGE non influisce su questo 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 è supportato anche 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' }: - literal_type specifica il tipo di sequenza di escape. I timestamp sono caratterizzati da tre identificatori di tipo literal_type: 1) d = solo data 2) t = solo ora 3) ts = timestamp (ora + data) - "constant_value" rappresenta il valore della sequenza di escape. constant_value deve seguire questi formati per ogni elemento literal_type:. d : yyyy-mm-dd t : hh:mm:ss[.fff] ts : yyyy-mm-dd hh:mm:ss[.fff] |
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 e ISO 8601.
Conversione dei dati relativi a data e ora
Quando si esegue la conversione in tipi di dati data e ora, SQL Server rifiuta tutti i valori che non può riconoscere come date o ore. Per informazioni sull'uso delle funzioni CAST e CONVERT con i dati relativi a data e ora, vedere CAST e CONVERT (Transact-SQL).
Conversione di altri tipi di data e ora nel tipo di dati datetime
Nella sezione seguente viene descritto il risultato della conversione di altri tipi di dati di data e ora nel tipo di dati datetime.
Quando viene eseguita la conversione da date, vengono copiati anno, mese e giorno. 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
.
DECLARE @date date = '12-21-16';
DECLARE @datetime datetime = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
--Result
--@datetime @date
------------------------- ----------
--2016-12-21 00:00:00.000 2016-12-21
Nota
L'esempio precedente usa un formato di data specifico dell'area (MM-GG-YY).
DECLARE @date date = '12-21-16';
È possibile aggiornare l'esempio in modo che corrisponda al formato per l'area.
È anche possibile completare l'esempio con il formato di data conforme ISO 8601 (AAAA-MM-GG). Ad esempio:
DECLARE @date date = '2016-12-21';
DECLARE @datetime datetime = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Quando la conversione è da 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
.
DECLARE @time time(4) = '12:10:05.1237';
DECLARE @datetime datetime = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
--Result
--@datetime @time
------------------------- -------------
--1900-01-01 12:10:05.123 12:10:05.1237
Quando la conversione viene eseguita da 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
.
DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';
DECLARE @datetime datetime = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
--Result
--@datetime @smalldatetime
------------------------- -----------------------
--2016-12-01 12:32:00.000 2016-12-01 12:32:00
Quando la conversione viene eseguita da datetimeoffset(n), i componenti di data e ora vengono copiati. Il fuso orario viene troncato. Quando la precisione frazionaria del valore datetimeoffset(n) è maggiore di tre cifre, il valore viene troncato. Nell'esempio seguente vengono illustrati i risultati della conversione di un valore datetimeoffset(4)
in un valore datetime
.
DECLARE @datetimeoffset datetimeoffset(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime datetime = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
--Result
--@datetime @datetimeoffset
------------------------- ------------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
Quando la conversione viene eseguita da datetime2(n), la data e l'ora vengono copiate. Quando la precisione frazionaria del valore datetime2(n) è maggiore di tre cifre, il valore viene troncato. Nell'esempio seguente vengono illustrati i risultati della conversione di un valore datetime2(4)
in un valore datetime
.
DECLARE @datetime2 datetime2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime datetime = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
--Result
--@datetime @datetime2
------------------------- ------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
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';
Questo è il 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 |