web-dev-qa-db-fra.com

Instruction SQL pour sélectionner toutes les lignes du jour précédent

Je recherche une bonne instruction SQL pour sélectionner toutes les lignes du jour précédent dans une table. La table contient une colonne datetime. J'utilise SQL Server 2005.

97
rudimenter

obtenir aujourd'hui pas le temps:

SELECT dateadd(day,datediff(day,0,GETDATE()),0)

obtenez hier pas de temps:

SELECT dateadd(day,datediff(day,1,GETDATE()),0)

requête pour toutes les lignes d'hier:

select 
    * 
    from yourTable
    WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
        AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)
176
KM.

Pour obtenir la valeur "aujourd'hui" en SQL:

convert(date, GETDATE())

Pour avoir "hier":

DATEADD(day, -1, convert(date, GETDATE()))

Pour obtenir "aujourd'hui moins X jours": changez le -1 en -X.

Donc pour toutes les lignes d'hier, vous obtenez:

select * from tablename
   where date >= DATEADD(day, -1, convert(date, GETDATE()))
   and date < convert(date, GETDATE())
32
Konamiman

Il semble que la réponse évidente manquait. Pour obtenir toutes les données d'une table (Ttable) où la colonne (DatetimeColumn) est une date/heure avec un horodatage, la requête suivante peut être utilisée:

SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday

Cela peut facilement être changé pour aujourd'hui, le mois dernier, l'année dernière, etc.

16
call me Steve
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
8
Romancha KC

C'est un très vieux fil, mais voici ce que je pense… .. Plutôt que 2 clauses différentes, une plus grande et une moins que. J'utilise la syntaxe ci-dessous pour sélectionner des enregistrements à partir d'une date. Si vous voulez une plage de dates, les réponses précédentes sont la solution.

SELECT * FROM TABLE_NAME WHERE 
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0

Dans le cas ci-dessus, X sera -1 pour les enregistrements d'hier

5
Rahul

Je ne peux pas le tester maintenant, mais:

select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)
4
Mark Bell

Dans SQL Server, procédez comme suit: 

where cast(columnName as date) = cast(getdate() -1 as date)

Vous devez utiliser les deux côtés de l'expression à la date pour éviter les problèmes de formatage de l'heure.

Si vous avez besoin de contrôler l’intervalle plus en détail, essayez quelque chose comme:

declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
2
Mário Meyrelles

Cela devrait le faire:

WHERE `date` = CURDATE() - INTERVAL 1 DAY
2
candlejack

Une autre façon de dire "hier" ... 

Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))

Cela ne fonctionnera probablement pas bien le 1er janvier, ainsi que le premier jour de chaque mois. Mais à la volée c'est efficace.

1
user3428292

Eh bien, il est plus facile de convertir la colonne datetime en date et de comparer.

SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) = 
   dateadd(day,0, convert(date, getdate(), 105)) 
1
Amey P Naik

subdate (now (), 1) retournera l'horodatage d'hier Le code ci-dessous sélectionnera toutes les lignes avec l'horodatage d'hier

Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
0
Dismi Paul