>Mi ritrovo con un campo di tipo data/ora (gg/mm/aaa hh.mm.ss)
>sul quale sto tentando di fare un filtro stupidissimo.
Che DBMS utilizzi?
>Dall'inizio ho notato che questo campo è popolato a volte con
>gg/mm/aaa hh.mm.ss e altre solo gg/mm/aaa.
>Facendo una query velocissima e impostando un filtro su tale
>campo (>= 01/03/2009 and <= 10/03/2009) mi restituisce
>i valori fino al 09/03/2009!
>Inserendo anche l'ora invece esce corretto. Perchè??
Perché internamente le date sono gestite come numeri decimali a partire da una base date (in SQL Server la base date è 1900-01-01 che corrisponde a 0).
La condizione che hai scritto restituisce tutte le righe per cui la data è compresa tra la mezzanotte dell' 1 marzo e del 10 marzo.
Tutte le righe per cui la data è successiva alla mezzanotte del 10 marzo NON saranno restituite.
>Non capisco questa cosa visto che la data del 10/03 compare piu
>volte con orari differenti.
>Mi basterebbe anche riuscire a estrapolarmi solo la data e poi
>farmi il filtro.
Brutta soluzione dato che dovresti applicare una funzione alla colonna data, rendendo inutili eventuali indici definiti su di essa.
Se ti interessa recuperare le righe della giornata del 10 marzo è sufficiente incrementare la data di 1 giorno togliendo l'"=".
In SQL Server scriverei:
SELECT...
FROM...
WHERE ColData >= '20090301'
AND ColData < '20090311';
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org