Database  »  Articoli  »  SQL Server 

Date e orari con SQL Server 2008

di: Marco Minerva     01 Giugno 2010

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.

Caratteristiche dei nuovi tipi di dati

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:

Tabella 1: Formato e intervallo dei tipi di dati del tempo
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)
Tabella 2: Accuratezza e dimensioni dei tipi di dati del tempo
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.

Guide Database

Guida Access

Iniziare a sviluppare database grazie alla potenza visuale offerta...

Guida SQL Server 2005

L'RDBMS di Microsoft è uno dei più utilizzati, soprattutto in ambito...

Guida Oracle

Scoprire ed approfondire un dei più importanti RDBMS sulla scena...

Altre guide

Newsletter

Ogni settimana, in due distinte newsletter: notizie a approfondimenti su MySQL, SQLserver e Oracle.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Nessun corso previsto

Nessun corso previsto