SQL Server 2000 - cambio dell'ora solare/legale

lunedì 02 aprile 2007 - 11.18

motodriver2002 Profilo | Newbie

Salve a tutti,

ho un problema con il cambio dell'ora solare/legale in SQL Server 2000.

Ho un tabella con un campo contenente un campo che indica una data ma è un campo INT che contiene i secondi passati dal 01/01/1970.

Per esempio
SELECT DATEDIFF(Second, '1970-01-01', '2007-04-01 12:00:00.000') restituisce 1175428800

Supponiamo quindi di avere un record con il valore 1175428800 nel campo "dial_sched_time".

Ogni mattina alle 04:00 gira una procedura che fa l'UPDATE di alcuni campi (in base ad un campo stato) spostandoli esattamente di un giorno e manetnendo l'ora invariata quindi il record con
dial_sched_time = 1175428800 dovrebbe assumere il valore 1175515200.


La procedura che ho scritto calcola il delta in giorni tra il valore di
SELECT DATEADD(Second, 1175428800, '1970-01-01') ----> 2007-04-01 12:00:00.000

e la data odierna
SELECT DATEDIFF(Day, '2007-04-01 12:00:00.000', GETDATE()) --> 1

aggiunge questo delta alla data del campo dial_sched_time
SELECT DATEADD(DAY, 1, '2007-04-01 12:00:00.000') --> 2007-04-02 12:00:00.000

infine converte la data ottenuta in secondi a partire dal 01/01/1970
SELECT DATEDIFF(Second, '1970-01-01', '2007-04-02 12:00:00.000') --> 1175515200

A parte la complessità del ragionamento che sarebbe stato molto più semplice sommando il valore 86400 (quantità dei secondi in un giorno) al campo "dial_sched_time", la procedura gira correttamente.

Il problema c'è stato il 25/03/2007 quando ho trovato che i record erano statio "avanzati" di 25 ore quindi la data
2007-03-24 12:00:00.000
è diventata
2007-03-25 13:00:00.000


Quello che avrei bisogno di capire meglio è il funzionamento di SQL Server e come gestisce le date ed il cambio dell'ora.

Consigli o suggerimenti?

lbenaglia Profilo | Guru

>Quello che avrei bisogno di capire meglio è il funzionamento
>di SQL Server e come gestisce le date ed il cambio dell'ora.

Ciao motodriver2002,

per memorizzare le informazioni di data e ora SQL Server offre i data type datetime e smalldatetime che differiscono per precisione e range di validità.
Sui Books Online troverai tutti i dettagli:

"datetime and smalldatetime"
http://msdn2.microsoft.com/en-us/library/aa258277.aspx

"Date and Time Functions"
http://msdn2.microsoft.com/en-us/library/aa258863.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5