essayer de le faire comme:
select ID, Datetime from Table where Datetime < '2010-04-01'
J'ai toujours étage datetime et incrémenter le jour et il suffit d'utiliser « < » moins.
au sol un datetime juste l'utilisation du jour:
SELECT DATEADD(day,DATEDIFF(day,0, GETDATE() ),0)
vous pouvez facilement incrémenter un datetime en utilisant plus:
SELECT GETDATE()+1
en utilisant le '23: 59: 59' vous pouvez manquer des lignes, essayer:
DECLARE @YourTable table (RowID int, DateOf datetime)
INSERT INTO @YourTable VALUES (1,'2010-03-31 10:00')
INSERT INTO @YourTable VALUES (2,'2010-03-31')
INSERT INTO @YourTable VALUES (3,'2010-03-31 23:59:59')
INSERT INTO @YourTable VALUES (4,'2010-03-31 23:59:59.887')
INSERT INTO @YourTable VALUES (5,'2010-04-01')
INSERT INTO @YourTable VALUES (6,'2010-04-01 10:00')
select * from @YourTable where DateOf <= '2010-03-31 23:59:59'
SORTIE
RowID DateOf
----------- -----------------------
1 2010-03-31 10:00:00.000
2 2010-03-31 00:00:00.000
3 2010-03-31 23:59:59.000
(3 row(s) affected
cette requête est erronée, car elle ne trouve pas l'enregistrement rowID = 4 manqué.
si vous essayez de résoudre ce problème avec:
select * from @YourTable where DateOf <= '2010-03-31 23:59:59.999'
alors RowID = 5 seront inclus aussi bien, ce qui est faux.
+1 pour expliquer ce qui se passe vraiment, et non une simple liste l'un des contournements. –
Merci pour l'explication, cela correspond à ce dont je me souviens - cependant, je viens de réaliser quelque chose de mon expérience de l'autre jour qui ne correspond pas vraiment à l'un ou l'autre de vos exemples. Dans mon cas, 2010-04-01 était inclus pour les valeurs de temps de 23:59:59 jusqu'à 23:59:30. 23:59:29 exclu le jour errant du jeu de résultats. Des idées? – Moo
Peu importe, cela a du sens. À votre santé! – Moo