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

Je cherche une bonne instruction SQL pour sélectionner toutes les lignes de la veille à partir d'une table. La table contient une colonne datetime. Je suis à l'aide de SQL Server 2005.

91
demandé sur rudimenter 2009-10-01 15:11:07

10 réponses

Obtenir aujourd'hui pas de temps:

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

Me yestersday pas de temps:

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

Requête pour toutes les lignes d'hier seulement:

select 
    * 
    from yourTable
    WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
        AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)
168
répondu KM. 2009-10-01 11:48:19

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

convert(date, GETDATE())

Pour obtenir "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())
29
répondu Konamiman 2009-10-01 11:20:25

Il semble que la réponse évidente manquait. Pour obtenir toutes les données d'une table (Ttable) où la colonne (DatetimeColumn) est une datetime 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.

15
répondu call me Steve 2015-02-27 11:57:04
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
8
répondu Romancha KC 2013-05-23 10:39:42

C'est un très vieux fil, Mais voici mon point de vue. Plutôt que 2 clauses différentes, une supérieure à et inférieure à. J'utilise cette syntaxe suivante pour sélectionner des enregistrements à partir d'Une date. Si vous voulez une plage de dates, les réponses précédentes sont la voie à suivre.

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
répondu Rahul 2012-03-12 23:31:46

Ne peut pas le tester en ce moment, mais:

select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)
4
répondu Mark Bell 2009-10-01 11:16:36

Cela devrait le faire:

WHERE `date` = CURDATE() - INTERVAL 1 DAY
2
répondu candlejack 2015-04-01 02:52:56

Dans SQL Server faites comme ceci:

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

Vous devez convertir les deux côtés de l'expression à ce jour pour éviter les problèmes de formatage de l'heure.

Si vous avez besoin de contrôler l'intervalle plus en détail, alors vous devriez essayer 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
répondu Mário Meyrelles 2015-08-11 20:50:35

Une autre façon de le 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
répondu user3428292 2014-03-17 09:54:28

Eh bien, il est plus facile de lancer la colonne datetime à ce jour et de comparer.

SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) = 
   dateadd(day,0, convert(date, getdate(), 105)) 
1
répondu Amey P Naik 2018-06-18 08:39:07