Lingua
Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In SQL Server 2008 sono stati introdotti tipi di dati separati per data e ora e tipi di dati espansi con intervallo più ampio, maggiore precisione e consapevolezza del fuso orario. Usare il pacchetto NuGet Microsoft.Data.SqlClient per accedere a questi tipi di dati dalle applicazioni client. Per gli esempi in questo articolo, importare Microsoft.Data.SqlClient e System.Data in C# o Visual Basic. I tipi di valore SQL comuni rimangono in System.Data.SqlTypes.
Le versioni di SQL Server precedenti a SQL Server 2008 hanno solo due tipi di dati per l'uso dei valori di data e ora: datetime e smalldatetime. Entrambi questi tipi di dati contengono sia il valore della data che un valore dell'ora e quindi risulta difficile usare solo uno dei due valori. Questi tipi di dati inoltre supportano solo le date che cadono dopo l'introduzione del calendario gregoriano, avvenuta nel 1753 in Inghilterra. Un'altra limitazione è che i tipi di dati più datati non dipendono dal fuso orario e per questo motivo è difficile lavorare con dati che provengono da più fusi orari.
Per ulteriori informazioni sui tipi di data e ora in SQL Server, vedere Tipi di dati e funzioni di data e ora.
Tipi di dati relativi a data e ora introdotti in SQL Server 2008
Nella seguente tabella vengono illustrati i nuovi tipi di dati per data e ora.
| Tipo di dati di SQL Server | Descrizione |
|---|---|
date |
Il tipo di dati date include un intervallo compreso tra il 1 gennaio 01 e il 31 dicembre 9999 con un'accuratezza di 1 giorno. Il valore predefinito è 1 gennaio 1900. La dimensione dello spazio di archiviazione è 3 byte. |
time |
Il tipo di dati time archivia esclusivamente i valori temporali basati su un orologio a 24 ore. Il tipo di dati time ha un intervallo compreso tra 00:00:00.0000000 e 23:59:59.9999999 con un'accuratezza di 100 nanosecondi. Il valore predefinito è 00:00:00.0000000 (mezzanotte). Il tipo di dati time supporta la precisione in secondi frazionari definita dall'utente e le dimensioni di archiviazione variano da 3 a 6 byte in base alla precisione specificata. |
datetime2 |
Il tipo di dati datetime2 combina l'intervallo e la precisione dei tipi di dati date e time in un unico tipo di dati.I valori predefiniti e i formati di valore letterale stringa sono gli stessi definiti nei tipi di dati date e time. |
datetimeoffset |
Il tipo di dati datetimeoffset include tutte le funzionalità di datetime2, con l'aggiunta di un offset di fusi orari. L'offset di fusi orari è rappresentato in formato [+|-] HH:MM. HH è un numero di due cifre, compreso tra 00 e 14, che rappresenta il numero di ore nella differenza di fuso orario. MM è un numero di due cifre, compreso tra 00 e 59, che rappresenta il numero di minuti aggiuntivi della differenza di fuso orario. I formati di ora sono supportati fino a 100 nanosecondi. Il segno + o - obbligatorio indica se la differenza di fuso orario viene aggiunta o sottratta dall'ora UTC (Universal Time Coordinate o ora di Greenwich) per ottenere l'ora locale. |
Nota
Per altre informazioni sull'uso della parola chiave Type System Version, vedere ConnectionString.
Formato e ordine della data
Il modo in cui SQL Server analizza i valori di data e ora dipende non solo dalla versione del sistema di tipi e dalla versione del server, ma anche dalle impostazioni della lingua predefinita e del formato di data del server. Una stringa di data che funziona per i formati di data di una lingua potrebbe non essere riconoscibile se la query viene eseguita da una connessione che usa un'altra impostazione per la lingua e il formato di data.
L'istruzione Transact-SQL SET LANGUAGE imposta in modo implicito l'impostazione DATEFORMAT che determina l'ordine delle parti della data. È possibile usare l'istruzione SET DATEFORMAT Transact-SQL in una connessione per evitare ambiguità tra i valori di data ordinando le parti della data in ordine MDY, DMY, YMD, YDM, MYD o DYM.
Se non si specifica alcun elemento DATEFORMAT per la connessione, SQL Server usa la lingua predefinita associata alla connessione. Ad esempio, una stringa di data "01/02/03" verrà interpretata come MDY (2 gennaio 2003) su un server con un'impostazione di lingua inglese degli Stati Uniti e come DMY (1 febbraio 2003) su un server con un'impostazione di lingua inglese britannico. L'anno viene determinato utilizzando la regola dell'anno di cutoff di SQL Server, che definisce la data limite per l'assegnazione del valore del secolo. Per ulteriori informazioni, consultare l'opzione di esclusione degli anni a due cifre.
Nota
Il YDM formato della data non è supportato durante la conversione da un formato stringa a date, time, datetime2o datetimeoffset.
Per ulteriori informazioni sulla modalità di interpretazione dei dati relativi a data e ora in SQL Server, vedere Utilizzo di dati relativi a data e ora.
Tipi di dati e parametri relativi a data e ora
Le enumerazioni riportate di seguito sono state aggiunte a SqlDbType per supportare i nuovi tipi di dati relativi a data e ora.
SqlDbType.DateSqlDbType.TimeSqlDbType.DateTime2SqlDbType.DateTimeOffset
Per specificare il tipo di dati per l'oggetto SqlParameter , utilizzare uno dei valori di enumerazione precedenti SqlDbType .
Nota
Non è possibile impostare la proprietà DbType di un SqlParameter su SqlDbType.Date.
Per specificare il tipo di parametro in modo generico, impostare la proprietà DbType sul valore dell'enumerazione DbType. I seguenti valori DbType supportano i tipi di dati datetime2 e datetimeoffset:
DbType.DateTime2DbType.DateTimeOffset
Queste nuove enumerazioni integrano le enumerazioni Date, Time e DateTime, che erano presenti nelle versioni precedenti di .NET Framework.
Il tipo di un oggetto parametro del provider di dati .NET Framework viene dedotto dal tipo del valore dell'oggetto parametro .NET Framework o dal valore DbType dell'oggetto parametro. Non sono stati introdotti nuovi tipi di dati System.Data.SqlTypes per supportare i nuovi tipi di dati di data e ora. Nella tabella seguente sono descritti i mapping tra i tipi di dati per data e ora di SQL Server 2008 e i tipi di dati CLR.
| Tipo di dati di SQL Server | Tipo .NET Framework | System.Data.SqlDbType |
System.Data.DbType |
|---|---|---|---|
date |
System.DateTime |
Date |
Date |
time |
System.TimeSpan |
Time |
Time |
datetime2 |
System.DateTime |
DateTime2 |
DateTime2 |
datetimeoffset |
System.DateTimeOffset |
DateTimeOffset |
DateTimeOffset |
datetime |
System.DateTime |
DateTime |
DateTime |
smalldatetime |
System.DateTime |
DateTime |
DateTime |
Proprietà di SqlParameter
Nella tabella seguente vengono descritte le proprietà SqlParameter pertinenti ai tipi di dati per data e ora.
| Proprietà | Descrizione |
|---|---|
| IsNullable | Ottiene o imposta se un valore è nullable. Quando si invia un valore di parametro Null al server, è necessario specificare DBNull anziché null (Nothing in Visual Basic). Per altre informazioni sui valori null di database, vedere Handling Null Values. |
| Precision | Ottiene o imposta il numero massimo di cifre usate per rappresentare il valore. Questa impostazione viene ignorata per i tipi di dati relativi a data e ora. |
| Scale | Ottiene o imposta la precisione delle frazioni di secondo per Time, DateTime2 e DateTimeOffset. Se non si imposta in modo esplicito la scala, il driver invia la scala 7. Impostare in modo esplicito la scala su 0 richiede zero cifre delle frazioni di secondo. |
| Size | Viene ignorata per i tipi di dati relativi a data e ora. |
| Value | Ottiene o imposta il valore del parametro. |
| SqlValue | Ottiene o imposta il valore del parametro. |
Nota
I valori di ora minori di zero o maggiori o uguali a 24 ore genereranno un ArgumentException.
Creazione di parametri
Creare SqlParameter oggetti con il costruttore o chiamare il Add metodo nella raccolta del Parameters comando. Il Add metodo accetta argomenti del costruttore o un oggetto parametro esistente.
Le sezioni successive di questo argomento contengono esempi che illustrano come specificare i parametri di data e ora. Per altri esempi di utilizzo dei parametri, vedere Configurazione di parametri e tipi di dati dei parametri e Parametri DataAdapter.
Esempio relativo a Date
Il frammento di codice seguente illustra come specificare un parametro date.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Date";
parameter.SqlDbType = SqlDbType.Date;
parameter.Value = "2007/12/1";
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Date"
parameter.SqlDbType = SqlDbType.Date
parameter.Value = "2007/12/1"
Esempio relativo al tempo
Il frammento di codice seguente illustra come specificare un parametro time.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@time";
parameter.SqlDbType = SqlDbType.Time;
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Time"
parameter.SqlDbType = SqlDbType.Time
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay
Esempio relativo a DateTime2
Il frammento di codice seguente illustra come specificare un parametro datetime2 con parti sia di data che di ora.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@Datetime2";
parameter.SqlDbType = SqlDbType.DateTime2;
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@Datetime2"
parameter.SqlDbType = SqlDbType.DateTime2
parameter.Value = DateTime.Parse("1666-09-02 1:00:00")
Esempio relativo a DateTimeOffset
Il frammento di codice seguente illustra come specificare un parametro DateTimeOffset con una data, un'ora e una differenza di fuso orario pari a 0.
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@DateTimeOffSet";
parameter.SqlDbType = SqlDbType.DateTimeOffset;
parameter.Value = DateTimeOffset.Parse("1666-09-02T01:00:00+00:00");
Dim parameter As New SqlParameter()
parameter.ParameterName = "@DateTimeOffSet"
parameter.SqlDbType = SqlDbType.DateTimeOffset
parameter.Value = DateTimeOffset.Parse("1666-09-02T01:00:00+00:00")
AddWithValue
Per specificare i parametri, è anche possibile chiamare AddWithValue sulla raccolta del Parameters comando, come illustrato nel frammento di codice seguente. Tuttavia, AddWithValue non consente di specificare DbType o SqlDbType per il parametro.
command.Parameters.AddWithValue(
"@date", DateTimeOffset.Parse("1666-09-02T01:00:00+00:00"));
command.Parameters.AddWithValue( _
"@date", DateTimeOffset.Parse("1666-09-02T01:00:00+00:00"))
Per questo DateTimeOffset valore, AddWithValue deduce SqlDbType.DateTimeOffset. Per impostare come destinazione un diverso tipo di data o ora di SQL Server, impostare in modo esplicito la proprietà del parametro SqlDbType.
Nella tabella seguente sono riportati gli elementi SqlDbTypes dedotti da tipi CLR specifici.
| Tipo CLR | Dedotto SqlDbType |
|---|---|
DateTime |
SqlDbType.DateTime |
TimeSpan |
SqlDbType.Time |
DateTimeOffset |
SqlDbType.DateTimeOffset |
Recupero di dati relativi a data e ora
Nella tabella seguente sono descritti i metodi usati per recuperare i valori di SQL Server 2008 relativi a data e ora.
| Metodo SqlClient | Descrizione |
|---|---|
| GetDateTime | Recupera il valore di colonna specificato come DateTime. |
| GetDateTimeOffset | Recupera il valore di colonna specificato come DateTimeOffset. |
| GetProviderSpecificFieldType | Restituisce il tipo che rappresenta il tipo specifico del provider sottostante per il campo. Restituisce gli stessi tipi di GetFieldType per i nuovi tipi di data e ora. |
| GetProviderSpecificValue | Recupera il valore della colonna specificata. Restituisce gli stessi tipi di GetValue per i nuovi tipi di data e ora. |
| GetProviderSpecificValues | Recupera i valori della matrice specificata. |
| GetSqlString | Recupera il valore della colonna nel formato SqlString. Il metodo genera InvalidCastException se i dati non possono essere espressi come SqlString. |
| GetSqlValue | Recupera i dati della colonna come predefinito SqlDbType. Restituisce gli stessi tipi di GetValue per i nuovi tipi di data e ora. |
| GetSqlValues | Recupera i valori della matrice specificata. |
| GetString | Recupera il valore della colonna come stringa se Type System Version è impostata su SQL Server 2005. Il metodo genera InvalidCastException se i dati non possono essere espressi come stringa. |
| GetTimeSpan | Recupera il valore di colonna specificato come TimeSpan. |
| GetValue | Recupera il valore della colonna specificata come tipo CLR sottostante. |
| GetValues | Recupera i valori colonna in una matrice. |
| GetSchemaTable | Restituisce i metadati del set di risultati nell'oggetto DataTable . |
Nota
La nuova data e ora SqlDbTypes non sono supportate per il codice eseguito in-processo in SQL Server. Se uno di questi tipi viene passato al server, verrà generata un'eccezione.
Impostazione di valori di data e ora come valori letterali
È possibile specificare tipi di dati di data e ora usando diversi formati di stringa letterale, che SQL Server valuta quindi in fase di esecuzione, convertendoli in strutture di data/ora interne. SQL Server riconosce i dati di data e ora racchiusi tra virgolette singole ('). Negli esempi seguenti sono illustrati alcuni formati:
Formati di data alfabetici, ad esempio
'October 15, 2006'.Formati di data numerici, ad esempio
'10/15/2006'.Formati di stringa senza separatori, ad esempio
'20061015', che vengono interpretati come 15 ottobre 2006 se si usa il formato di data ISO standard.
I valori di ora minori di zero o maggiori o uguali a 24 ore genereranno un ArgumentException.
Risorse della documentazione di SQL Server
Per altre informazioni sull'uso dei valori di data e ora in SQL Server, vedere gli articoli seguenti.
| Articolo | Descrizione |
|---|---|
| Funzioni e tipi di dati di data e ora (Transact-SQL) | Viene fornita una panoramica di tutte le funzioni e i tipi di dati relativi a data e ora di Transact-SQL. |
| Uso di dati relativi a data e ora | Informazioni sui tipi di dati e le funzioni relativi a data e ora ed esempi per l'uso. |
| Tipi di dati (Transact-SQL) | Vengono descritti i tipi di dati di sistema inclusi in SQL Server. |