Confronto di date in SQL Server

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: ,
«novembre»
domlunmarmergiovensab
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789