web-dev-qa-db-fra.com

TSQL SELECT les enregistrements de la date précédente

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.

18
Alex

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?

27
Mikael Eriksson
SELECT * FROM Log
WHERE DateAndTime >= DATEADD(DAY,-1, CAST(GETDATE() AS DATE))
AND DateAndTime < CAST(CAST(GETDATE() AS DATE) AS DATETIME)
3
JanW

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.

1
James Wiseman

En supposant que SQL Server

 declare @today date
 set @today = GETDATE()

 select * from Log where DateAndTime between DATEADD(dd, -1, @today ) and @today
0
BonyT

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

0
Pankaj