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.
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)
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())
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.
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
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
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)
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)
Cela devrait le faire:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
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.
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))
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)