Lavorare con le date in SQL Server

20 marzo 2006

Sql Server non possiede tipi dati separati per archiviare i valori di data e ora. Adotta una strategia differente: un tipo dati combinato, denominato datetime, in grado di archiviarli entrambi.

La suddivisione tra Datetime e Smalldatetime

I tipi datetime sono suddivi in due tipologie:

  1. Datetime.
    Ammette valori compresi tra il 1 Gennaio 1753 e il  31 Dicembre 9999 ed occupa uno spazio di 8 byte (fornisce una precisione al trecentesimo di secondo).  
  2. Smalldatetime.
    Ammette valori compresi tra il 1 Gennaio 1900 e il 6 Giugno 2079  ed occupa uno spazio di 4 byte (fornisce una precisione al minuto).

I valori datetime archiviano data e ora con grande precisione, per questo motivo utilizzano 8 byte per la memorizzazione:

  • 4 byte per il numero di giorni precedenti o successivi alla data di base, ovvero il 1° gennaio 1900 (data di riferimento di Sql Server)
  • 4 byte per l’ora del giorno, espressa come numero di millisecondi dopo la mezzanotte

Al contrario i valori smalldatetime archiviano data e ora con una precisione inferiore ed occupano solo 4 byte, così suddivisi:

  • 2 byte per il numero di giorni successivi al 1° gennaio 1900
  • 2 byte per il numero di minuti dopo la mezzanotte

Inoltre per valori smalldatetime minori o uguali di 29,998 secondi vengono arrotondati per difetto al minuto precedente, mentre i valori uguali o maggiori di 29,999 vengono arrotondati per eccesso al minuto successivo, ad esempio:

–restituisce l’ora come 12:35
SELECT CAST(‘2000-08-05 12:35:29.998’ AS smalldatetime)
GO
–restituisce l’ora come 12:36
SELECT CAST(‘2000-08-05 12:35:29.999’ AS smalldatetime)
GO

I valori non riconosciuti in SQL Server come date comprese tra il 1753 e il 9999 vengono rifiutati, vediamo alcuni esempi di valori non corretti:

Use tempdb
Go
CREATE TABLE T_PROVA (Data DateTime) ‘- Creiamo una tabella con una colonna datetime
Go
–L’inserimento fallisce perchè abbiamo inserito una data minore del 1 gennaio 1753
INSERT INTO T_PROVA VALUES (‘17521231’)
–L’inserimento fallisce perchè abbiamo inserito una data non valida, non esiste il 32 gennaio 2005!
INSERT INTO T_PROVA VALUES (‘20050132’)
–L’inserimento fallisce perchè abbiamo inserito una data non valida, non esiste la data pippoplutoepaperino!
INSERT INTO T_PROVA VALUES (‘pippoplutoepaperino’)

Ogni volta che tentiamo di inserire una data non valida, SQL Server ci invia il seguente messaggio:

Server: Msg 242, Level 16, State 3, Line 1
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
The statement has been terminated.

Inserire valori di data e tempo in SQL Server

Nel paragrafo precedente, abbiamo visto che l’immissione di date in SQL Server avviene tramite stringhe costanti le quali vengono interpretate e convertite in formato binario.

Una volta che i dati relativi a data e ora sono rappresentati in formato binario, l’esecuzione dei calcoli complessi su date e ore risulta semplice, così come la conversione delle date e delle ore in stringhe durante l’applicazione di formati diversi mediante le funzioni T-SQL.

Se vuoi aggiornamenti su Lavorare con le date in SQL Server inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Lavorare con le date in SQL Server

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy