Sino alla versione 2005, SQL Server forniva unicamente il tipo datetime per memorizzare date e orari: anche se volevamo salvare solo una data (ad esempio la data di nascita di una persona), si doveva comunque inserire un orario non significativo, con un conseguente spreco di spazio di archiviazione e la necessità di ricorrere a particolari "accorgimenti" per effettuare ricerche in campi di questo tipo (come vedremo meglio nel seguito).
Nota: gli esempi commentati in questo articolo sono disponibili nel file zip allegato.
Analogamente, anche quando ci interessava esclusivamente un orario, tale informazione doveva essere accompagnata una data fittizia (a patto, naturalmente, di non salvare le date e gli orari in campi di tipo VARCHAR).
SQL Server 2008 risolve questi problemi introducendo nuovi tipi di dati per la gestione di date e orari, ovvero date, time, datetime2 e datetimeoffset. Essi sono pienamente conformi allo standard SQL, quindi garantiscono la massima portabilità. Come i loro nomi lasciano intuire, i primi due consentono di memorizzare separatamente una data oppure un orario, mentre il datetime2 è una sorta di estensione del datetime tradizionale, di cui aumenta l'intervallo di valori consentiti e la precisione. Il datetimeoffset, infine, aggiunge al datetime2 la possibilità di indicare il fuso di orario di appartenenza.
Questi nuovi tipi di dati sono supportati da tutte le versioni di SQL Server 2008, compresa l'edizione Express. Per utilizzarli con i linguaggi di programmazione .NET, è necessario utilizzare Visual Studio 2008 aggiornato al Service Pack 1 o versione successiva.
Le due tabelle seguenti, prese direttamente dalla documentazione in linea, mostrano le caratteristiche principali dei nuovi tipi di dati, a confronto con quelle dei tipi esistenti:
| Tipo di dati | Formato | Intervallo |
|---|---|---|
| time | hh:mm:ss[.nnnnnnn] | da 00:00:00.0000000 a 23:59:59.9999999 |
| date | YYYY-MM-DD | da 0001-01-01 a 9999-12-31 |
| smalldatetime | YYYY-MM-DD hh:mm:ss | da 1900-01-01 a 2079-06-06 |
| datetime | YYYY-MM-DD hh:mm:ss[.nnn] | da 1753-01-01 a 9999-12-31 |
| datetime2 | YYYY-MM-DD hh:mm:ss[.nnnnnnn] | da 0001-01-01 00:00:00.0000000 a 9999-12-31 23:59:59.9999999 |
| datetimeoffset | YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm | da 0001-01-01 00:00:00.0000000 a 9999-12-31 23:59:59.9999999 (in UTC) |
| Tipo di dati | Accuratezza | Dimensioni (in byte) | Altro |
|---|---|---|---|
| time | 100 nanosecondi | da 3 a 5 | |
| date | 1 giorno | 3 | |
| smalldatetime | 1 minuto | 4 | |
| datetime | 0,00333 secondi | 8 | |
| datetime2 | 100 nanosecondi | da 6 a 8 | |
| datetimeoffset | 100 nanosecondi | da 8 a 10 | Gestisce i fusi orari |
Da notare l'aumento di precisione del tipo datetime2 rispetto al datetime: da 0,00333 secondi si passa a soli 100 nanosecondi.
Nella pagina successiva vedremo gli esempi pratici per recuperare la data da un set di dati.
|
SQL Maintenance Solution: soluzione free per la manutenzione di SQL Server |
Guida AccessIniziare a sviluppare database grazie alla potenza visuale offerta... |
Guida SQL Server 2005L'RDBMS di Microsoft è uno dei più utilizzati, soprattutto in ambito... |
Guida OracleScoprire ed approfondire un dei più importanti RDBMS sulla scena... |
Ogni settimana, in due distinte newsletter: notizie a approfondimenti su MySQL, SQLserver e Oracle.
Iscriviti alla newsletter