Ich suche eine gute SQL-Anweisung, um alle Zeilen des Vortages aus einer Tabelle auszuwählen. Die Tabelle enthält eine Datums- / Uhrzeitspalte. Ich verwende SQL Server 2005.
Ich suche eine gute SQL-Anweisung, um alle Zeilen des Vortages aus einer Tabelle auszuwählen. Die Tabelle enthält eine Datums- / Uhrzeitspalte. Ich verwende SQL Server 2005.
Antworten:
bekomme heute keine zeit:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
bekomme gestern keine zeit:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
Abfrage für alle Zeilen von erst gestern:
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)
bekomme ich:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
So erhalten Sie den "Heute" -Wert in SQL:
convert(date, GETDATE())
Um "gestern" zu bekommen:
DATEADD(day, -1, convert(date, GETDATE()))
Um "heute minus X Tage" zu erhalten: Ändern Sie -1 in -X.
Für alle Zeilen von gestern erhalten Sie also:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
Es scheint, dass die offensichtliche Antwort fehlte. Um alle Daten aus einer Tabelle (Ttable) abzurufen, in der die Spalte (DatetimeColumn) eine Datumszeit mit einem Zeitstempel ist, kann die folgende Abfrage verwendet werden:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Dies kann leicht auf heute, letzten Monat, letztes Jahr usw. geändert werden.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
als der DATEDIFF () in jeder Zeile
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
Es ist ein wirklich alter Thread, aber hier ist meine Meinung dazu. Anstelle von 2 verschiedenen Klauseln, eine größer als und kleiner als. Ich verwende diese Syntax unten, um Datensätze aus einem Datum auszuwählen. Wenn Sie einen Datumsbereich wünschen, sind vorherige Antworten der richtige Weg.
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
Im obigen Fall ist X für die gestrigen Datensätze -1
Dies sollte es tun:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
Gehen Sie in SQL Server folgendermaßen vor:
where cast(columnName as date) = cast(getdate() -1 as date)
Sie sollten beide Seiten des Ausdrucks auf den neuesten Stand bringen, um Probleme mit der Zeitformatierung zu vermeiden.
Wenn Sie das Intervall genauer steuern müssen, sollten Sie Folgendes ausprobieren:
declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
Eine andere Möglichkeit, es "Gestern" zu sagen ...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
Dies funktioniert möglicherweise nicht gut am 1. Januar sowie am ersten Tag eines jeden Monats. Aber im laufenden Betrieb ist es effektiv.
Nun, es ist einfacher, die datetime-Spalte auf den neuesten Stand zu bringen und zu vergleichen.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
subdate (now (), 1) gibt den Zeitstempel von gestern zurück. Der folgende Code wählt alle Zeilen mit dem gestrigen Zeitstempel aus
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
SELECT *
Daten werden jedoch mit ihren ursprünglichen Zeiten zurückgegeben.