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