Je souhaite sélectionner tous les enregistrements d'une table Log
où les valeurs du champ DateAndTime
(de type datetime
) correspondent au jour précédent, quel que soit le jour.
Donc, si aujourd'hui est le 2011-06-08, je veux sélectionner toutes les lignes où DateAndTime
est supérieur ou égal à 2011-06-07 00:00:00
et également inférieur à 2011-06-08 00:00:00
.
J'imagine que le piège potentiel ici serait qu'il s'agisse d'un comportement le premier jour du mois, étant donné qu'une date telle que 2011-06-00
est invalide et devrait être 2011-05-31
.
Pour SQL Server 2008, vous pouvez l'utiliser.
select *
from [log]
where cast(DateAndTime as date) = cast(getdate()-1 as date)
Avant 2008, vous pouvez utiliser cette
select *
from [log]
where DateAndTime >= dateadd(d, datediff(d, 0, getdate())-1, 0) and
DateAndTime < dateadd(d, datediff(d, 0, getdate()), 0)
Related on DBA: Le casting à ce jour est sargable mais est-ce une bonne idée?
SELECT * FROM Log
WHERE DateAndTime >= DATEADD(DAY,-1, CAST(GETDATE() AS DATE))
AND DateAndTime < CAST(CAST(GETDATE() AS DATE) AS DATETIME)
Cet exemple suppose que SQL Server:
select *
from log
where convert(varchar(8), DateAndTime , 112) = convert(varchar(8), getdate()-1, 112)
Convertissez essentiellement la date en yyyymmdd (paramètre 112
), puis vérifiez qu'elle est égale à la date d'hier (getdate()-1
), également convertie en yyyymmdd.
En supposant que SQL Server
declare @today date
set @today = GETDATE()
select * from Log where DateAndTime between DATEADD(dd, -1, @today ) and @today
Il devrait inclure opérateur conditionnel et non entre . Sinon, il inclut également les enregistrements actuels.
Declare @today date
Set @today = GETDATE()
Select YourcolumnNames from log
Where DateAndTime >= DATEADD(dd, -1, @today ) and DateAndTime < DATEADD(dd, -1, @today )
De plus, vous devriez mentionner le nom de la colonne et * devrait être évité dans l'instruction select. Cela peut améliorer les performances