Condividi tramite


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.

Si applica a: SQL Server (SQL Server 2008 tramite versione corrente), Database SQL di Windows Azure (versione iniziale tramite versione corrente).

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:

  • numero separatore numero separatore number [time] [time]

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:

  • Racchiudere data e ora tra virgolette singole ('). Per le lingue diverse dall'inglese, utilizzare N'

  • I caratteri inclusi tra parentesi sono facoltativi.

  • Se si specificano solo le ultime due cifre dell'anno, i valori minori delle ultime due cifre del valore impostato nell'opzione di configurazione Configurare l'opzione di configurazione del server two-digit year cutoff 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 è interpretato come 2025 mentre 50 è interpretato come 1950. Per evitare ambiguità, esprimere gli anni nel formato a quattro cifre.

  • Se manca il giorno, viene inserito il primo giorno del mese.

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:

  • 2004-05-23T14:25:10

  • 2004-05-23T14:25:10.487

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' }:

  • literal_type specifica il tipo di sequenza di escape. I timestamp sono caratterizzati da tre identificatori di tipo literal_type:

    • d = solo data

    • t = solo ora

    • ts = timestamp (ora + data)

  • 'constant_value' valore della sequenza di escape. constant_value deve seguire questi formati per ogni literal_type.

    literal_type

    Formato constant_value

    d

    aaaa-mm-gg

    t

    hh.mm.ss[.fff]

    ts

    aaaa-mm-gg 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 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.

DECLARE @date date = '12-21-05';
DECLARE @datetime datetime = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
--Result
--@datetime               @date
------------------------- ----------
--2005-12-21 00:00:00.000 2005-12-21

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
--
--(1 row(s) affected)

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-01 12:32';
DECLARE @datetime datetime = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
--Result
--@datetime               @smalldatetime
------------------------- -----------------------
--2001-12-01 12:32:00.000 2001-12-01 12:32:00
--
--(1 row(s) affected)

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.

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 +01:0
--
--(1 row(s) affected)

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.

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
--
--(1 row(s) affected)

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

Vedere anche

Riferimento

CAST e CONVERT (Transact-SQL)