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.
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.
Réponses:
obtenir aujourd'hui pas de temps:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
obtenir hier 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)
SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0)
je reçois:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
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 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.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
que car il doit évaluer le DATEDIFF () sur chaque ligne
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
C'est un fil vraiment vieux, mais voici mon point de vue. Plutôt que 2 clauses différentes, une supérieure et inférieure à. J'utilise cette syntaxe ci-dessous pour sélectionner les 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
Cela devrait le faire:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
Dans SQL Server, procédez comme suit:
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 mise en forme de l'heure.
Si vous avez besoin de contrôler l'intervalle plus en détail, 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 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 la comparer.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
subdate (now (), 1) renverra 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)
SELECT *
renverra toutes les dates avec leurs heures d'origine.