2011-06-08 4 views
13

Je veux sélectionner tous les enregistrements d'une table Log où les valeurs de champ DateAndTime sont pour la journée d'aujourd'hui, quel que soit le jour.TSQL SELECT enregistrements de la date précédente

Donc, si aujourd'hui est 2011-06-08, je veux sélectionner toutes les lignes où DateAndTime est supérieur ou égal à 2011-06-07 00:00:00 et aussi inférieur à 2011-06-08 00:00:00.

Je suppose que le piège potentiel ici serait son comportement le 1er jour du mois, car évidemment une date comme 2011-06-00 est invalide, et devrait être 2011-05-31.

Répondre

22

Pour SQL Server 2008, vous pouvez 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) 

connexes sur DBA: Cast to date is sargable but is it a good idea?

+1

La coulée de la colonne peut avoir de sérieuses implications sur les performances, voir la solution de JanW ci-dessous –

+0

@AdriaanDavel Oui, avec des estimations de cardinalité. Pas avec sargability. Avez-vous lu la question sur DBA liée à ma réponse? –

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

Cet exemple suppose SQL Server:

select * 
from log 
where convert(varchar(8), DateAndTime , 112) = convert(varchar(8), getdate()-1, 112) 

Essentiellement, convertir la date à aaaammjj (le paramètre 112), puis le vérifier est égale à la date d'hier (getdate()-1), converti également AAAAMMJJ.

0

En supposant SQL Server

declare @today date 
set @today = GETDATE() 

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

Il devrait inclure opérateur conditionnel et non entre. Sinon, il inclut également les enregistrements d'aujourd'hui. En outre, vous devez mentionner le nom de la colonne et * doit être évité dans l'instruction select. Cela peut améliorer les performances

Questions connexes