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):
|
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.
|
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.
|
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).
|
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).
|
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 |