date (Transact-SQL)

Definisce una data.

Descrizione di date

Proprietà

Valore

Sintassi

date

Utilizzo

DECLARE @MyDate date

CREATE TABLE Table1 ( Column1 date )

Formato predefinito dei valori letterali stringa

(utilizzato per client legacy)

AAAA-MM-GG

Per ulteriori informazioni, vedere la sezione seguente relativa alla compatibilità con le versioni precedenti per i client legacy.

Intervallo

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

dall'1 gennaio 1 D.C. al 31 dicembre 9999 D.C.

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.

Lunghezza in caratteri

10 posizioni

Precisione, scala

10, 0

Dimensioni dello spazio di archiviazione

3 byte, fissa

Struttura di archiviazione

Valore intero di 1, 3 byte archivia la data.

Accuratezza

Un giorno

Valore predefinito

1900-01-01

Questo valore è utilizzato per la parte relativa alla data aggiunta per la conversione implicita da time a datetime2 o datetimeoffset.

Calendario

Gregoriano

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 date

Nelle tabelle seguenti sono illustrati i formati di valore letterale stringa supportati per il tipo di dati date.

Valore numerico

Descrizione

mga                         

[m]m/gg/[aa]aa       

[m]m-gg-[aa]aa       

[m]m.gg.[aa]aa       

mag                         

mm/[aa]aa/gg       

mm-[aa]aa/gg       

[m]m.[aa]aa.gg       

gma                         

gg/[m]m/[aa]aa       

gg-[m]m-[aa]aa       

gg.[m]m.[aa]aa       

gam                         

gg/[aa]aa/[m]m       

gg-[aa]aa-[m]m       

gg.[aa]aa.[m]m       

amg                         

[aa]aa/[m]m/gg       

[aa]aa-[m]m-gg       

[aa]aa-[m]m-gg       

[m]m, gg e [aa]aa rappresentano il mese, il giorno e l'anno all'interno di una stringa in cui sono utilizzati come separatori la barra (/), il segno meno (-) o il punto (.).

Sono supportati solo anni a due cifre o a quattro cifre. Utilizzare sempre anni a quattro cifre quando possibile. Per specificare un numero integer da 0001 a 9999 che rappresenta l'anno di cambio data per l'interpretazione degli anni a due cifre come anni a quattro cifre, utilizzare l'opzione Configurare l'opzione di configurazione del server two-digit year cutoff.

Un anno a due cifre con valore minore o uguale alle ultime due cifre dell'anno di cambio data si trova nello stesso secolo dell'anno di cambio data. Un anno a due cifre con valore maggiore delle ultime due cifre dell'anno di cambio data si trova nel secolo precedente a quello dell'anno di cambio data. Ad esempio, se il valore dell'anno di cambio data è 2049 (impostazione predefinita), l'anno a due cifre 49 è interpretato come 2049 mentre l'anno a due cifre 50 è interpretato come 1950.

Il formato predefinito della data è determinato dall'impostazione della lingua corrente. È possibile modificare il formato di data utilizzando le istruzioni SET LANGUAGE e SET DATEFORMAT.

Il formato ydm non è supportato per date.

Espressione alfabetica

Descrizione

mese [gg][,] aaaa      

mese gg[,] [aa]aa      

mese aaaa [gg]          

[gg] mese[,] aaaa      

gg mese[,][aa]aa       

gg [aa]aa mese         

[gg] aaaa mese         

aaaa mese [gg]         

aaaa [gg] mese         

mon (mese) rappresenta il nome completo o l'abbreviazione del mese nella lingua corrente. Le virgole sono facoltative e l'uso delle maiuscole è ignorato.

Per evitare ambiguità, esprimere gli anni nel formato a quattro cifre.

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

ISO 8601

Descrizione

AAAA-MM-GG            

AAAAMMGG               

Uguale allo standard SQL. Si tratta dell'unico formato definito come standard internazionale.

Senza separatori

Descrizione

[aa]aammgg            

aaaa[mm][gg]          

I dati relativi all'elemento date possono essere specificati con quattro, sei o otto cifre. Una stringa a sei o otto cifre viene sempre interpretata come ymd (amg). Il mese e il giorno devono sempre essere rappresentati da due cifre. Una stringa di quattro cifre viene interpretata come anno.

ODBC

Descrizione

{ g 'aaaa-mm-gg' }   

Specifico delle API ODBC

Il funzionamento in SQL Server 2012 corrisponde a quello in SQL Server 2005.

Formato W3C XML

Descrizione

aaaa-mm-ggTZD      

Specificamente supportato per l'utilizzo di XML/SOAP.

TZD è l'identificatore del fuso orario (Z, + hh:mm o - hh:mm):

  • hh.mm rappresenta la differenza di fuso orario. hh è un numero di due cifre, compreso tra 0 e 14, che rappresenta il numero di ore della differenza di fuso orario.

  • MM è un numero di due cifre, tra 0 e 59, che rappresenta il numero di minuti aggiuntivi della differenza di fuso orario.

  • + (più) o - (meno) è il segno obbligatorio della differenza di fuso orario. Indica che la differenza di fuso orario viene aggiunta o sottratta dall'ora UTC (Coordinated Universal Times) per ottenere l'ora locale. L'intervallo valido della differenza di fuso orario è da -14:00 a +14:00.

Conformità agli standard ANSI e ISO 8601

date è conforme alla definizione dello standard ANSI SQL per il calendario gregoriano: "NOTA 85 - i tipi di dati Datetime consentiranno l'archiviazione delle date in formato gregoriano nell'intervallo di date compreso tra 0001–01–01 CE e 9999–12–31 CE".

Il formato predefinito dei valori letterali stringa utilizzato per i client legacy è conforme al formato standard SQL, definito come AAAA-MM-GG. Questo formato è lo stesso della definizione ISO 8601 per DATE.

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

AAAA-MM-GG

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 date in altri tipi di dati relativi a data e ora

Nella tabella seguente viene descritto il risultato della conversione di un tipo di dati date in altri tipi di dati relativi a data e ora.

Tipo di dati in cui viene eseguita la conversione

Dettagli relativi alla conversione

time(n)

La conversione non viene eseguita e viene generato il messaggio di errore 206: "Conflitto del tipo di operando: date è incompatibile con time".

datetime

Il componente relativo alla data viene copiato e quello 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-10-25';
DECLARE @datetime datetime= @date;
SELECT @date AS '@date', @datetime AS '@datetime';
--Result
--@date      @datetime
------------ -----------------------
--2025-12-10 2025-12-10 00:00:00.000
--
--(1 row(s) affected)

smalldatetime

Quando il valore date è compreso nell'intervallo di un tipo di dati smalldatetime, il componente relativo alla data viene copiato mentre quello relativo all'ora viene impostato su 00:00:00. Quando il valore date non è compreso nell'intervallo di un valore smalldatetime, viene generato il messaggio di errore 242: "La conversione di un tipo di dati date in un tipo di dati smalldatetime ha generato un valore non compreso nell'intervallo dei valori consentiti e il valore smalldatetime viene impostato su NULL".

Nel codice seguente vengono illustrati i risultati della conversione di un valore date in un valore smalldatetime.

DECLARE @date date= '1912-10-25';
DECLARE @smalldatetime smalldatetime = @date;
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';
--Result
--@date      @smalldatetime
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00
--
--(1 row(s) affected)

datetimeoffset(n)

La data viene copiata e l'ora viene impostata su 00:00.0000000 +00:00.

Nel codice seguente vengono illustrati i risultati della conversione di un valore date in un valore datetimeoffset(3).

DECLARE @date date = '1912-10-25';
DECLARE @datetimeoffset datetimeoffset(3) = @date;
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';
--Result
--@date      @datetimeoffset
------------ ------------------------------
--1912-10-25 1912-10-25 00:00:00.000 +00:00
--
--(1 row(s) affected)

datetime2(n)

Il componente relativo alla data viene copiato mentre quello relativo all'ora viene impostato su 00:00:00.00, indipendentemente dal valore di (n).

Nel codice seguente vengono illustrati i risultati della conversione di un valore date in un valore datetime2(3).

DECLARE @date date = '1912-10-25';
DECLARE @datetime2 datetime2(3) = @date;
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';
--Result
--@date      @datetime2(3)
------------ -----------------------
--1912-10-25 1912-10-25 00:00:00.00
--
--(1 row(s) affected)

Conversione di valori letterali stringa nel tipo di dati date

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 date.

Valore letterale stringa di input

date

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 un tipo date 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

Semplice

solo TIME

Vengono forniti i valori predefiniti.

solo TIMEZONE

Vengono forniti i valori predefiniti.

DATE + TIME

Viene utilizzata la parte di DATE della stringa di input.

DATE + TIMEZONE

Non consentiti.

TIME + TIMEZONE

Vengono forniti i valori predefiniti.

DATE + TIME + TIMEZONE

Verrà utilizzata la parte DATE di DATETIME locale.

Esempi

Nell'esempio seguente vengono confrontati i risultati dell'esecuzione del cast di una stringa ai tipi di dati relativi a data e ora.

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)