Un problema che si incontra spesso in SQL Server, quando bisogna effettuare delle query che effettuano il confronto su due campi di tipo DateTime, consiste nel fatto che SQL Server, oltre a memorizzare la data, memorizza anche l’orario. Ad esempio una query del genere potrebbe dare questo tipo di risultato:
select Data1, Data2 from MiaTabella where Data1 <= Data2
Data1 Data2
----------------------- -----------------------
2006-11-21 12:38:00 2006-11-23 17:18:00
2006-07-24 10:52:00 2006-07-24 10:52:00
A prima vista sembrerebbe corretto, ma c’è la possibilità che si verifichi un errore piuttosto subdolo.
Esistono diverse soluzioni al problema, quella che preferisco è quella di utilizzare la funzione DATEDIFF. Se correggiamo la query in questo modo ci accorgiamo subito di quale era l’errore della prima query.
select Data1, Data2 from MiaTabella where DATEDIFF(d, Data2, Data1) <= 0
Data1 Data2
----------------------- -----------------------
2006-11-21 12:38:00 2006-11-23 17:18:00
2006-07-24 10:52:00 2006-07-24 10:52:00
2006-07-25 11:54:00 2006-07-25 11:53:00
Technorati Tags:
SQL Server,
SQL
posted @ venerdì 24 novembre 2006 13:25