2012-02-14 3 views
5

J'ai besoin de tous les enregistrements de la dernière journée?comment obtenir des enregistrements de la veille en utilisant tsql?

Salut

Select * from table1 where tabledate > getdate() -1 

avec cette requête, je dois courir est exactement après minuit pour obtenir le résultat exact. Je dois l'exécuter pendant la journée et obtenir tous les enregistrements de la veille.

+0

double possible de [instruction SQL pour sélectionner toutes les lignes de la veille] (https://stackoverflow.com/questions/1503298/sql-statement-to-select -all-rows-from-previous-day) –

Répondre

7

Dans SQL Server 2005, ce qui est généralement le meilleur moyen de convertir un datetime à une date:

DATEADD(day, DATEDIFF(day, 0, yourDate), 0) 

Dans votre cas, il est fait une seule fois, donc la façon dont n'a pas vraiment beaucoup d'importance. Mais il donne la requête suivante.

Select 
    * 
from 
    table1 
where 
     tabledate >= DATEADD(day, DATEDIFF(day, 0, getDate()) - 1, 0) 
    AND tabledate < DATEADD(day, DATEDIFF(day, 0, getDate()),  0) 
0

Une autre méthode consiste à utiliser seul DATEDIFF:

SELECT * FROM table1 
WHERE DATEDIFF(DAY, tabledate, GETDATE()) = 1 

A datediff de 1 jour pour couvre tout moment de la journée précédente.

+3

Et il va aussi assourdir l'optimiseur avec un énorme rocher. Si le champ 'tabledate' est indexé, cette version ne pourra * pas * utiliser une recherche de plage sur l'index. Au lieu de cela, il aura besoin de *** analyser *** l'index entier en calculant le DATEDIFF() sur chaque valeur unique. C'est parce que le champ recherché est maintenant caché dans votre appel de fonction. L'alternative est légèrement plus longue, mais garde tous les appels de fonction sur les constantes, et permet donc la recherche *** beaucoup plus rapide ***. – MatBailie

+0

Effectivement, touche. +1 – Bort

0
DECLARE @d SMALLDATETIME; 
SET @d = DATEDIFF(DAY, 0, GETDATE()); 

SELECT <cols> FROM dbo.table1 
    WHERE tabledate >= DATEADD(DAY, -1, d) 
    AND tabledate < @d; 
0

Essayez ceci:

your_field = cast(dateadd(D,-1,getdate()) as DATE) 
Questions connexes