it-swarm.com.de

SQL-Anweisung, um alle Zeilen des vorherigen Tages auszuwählen

Ich suche nach einer guten SQL-Anweisung, um alle Zeilen des vorherigen Tages aus einer Tabelle auszuwählen. Die Tabelle enthält eine Datetime-Spalte. Ich verwende SQL Server 2005.

97
rudimenter

heute keine Zeit bekommen:

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 nur gestern:

select 
    * 
    from yourTable
    WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
        AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)
176
KM.

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 gestrigen Reihen erhalten Sie:

select * from tablename
   where date >= DATEADD(day, -1, convert(date, GETDATE()))
   and date < convert(date, GETDATE())
32
Konamiman

Es scheint, dass die offensichtliche Antwort fehlte. Um alle Daten aus einer Tabelle (Ttable) zu erhalten, bei 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.

16
call me Steve
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
8
Romancha KC

Es ist ein wirklich alter Thread, aber hier ist meine Meinung dazu .. _. Ich verwende die folgende Syntax zum Auswählen von Datensätzen aus einem Datum. Wenn Sie einen Datumsbereich wünschen, sind die vorherigen 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 Datensätze von gestern -1

5
Rahul

Ich kann es jetzt nicht testen, aber:

select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)
4
Mark Bell

In SQL Server mache das so: 

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öchten, sollten Sie Folgendes versuchen:

declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
2

Das sollte es tun:

WHERE `date` = CURDATE() - INTERVAL 1 DAY
2
candlejack

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()))

Am 1. Januar und am ersten Tag jedes Monats funktioniert dies vermutlich nicht gut. Aber im Fluge ist es effektiv.

1
user3428292

Nun, es ist einfacher, die datetime-Spalte bis zum Datum zu gießen und dann zu vergleichen.

SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) = 
   dateadd(day,0, convert(date, getdate(), 105)) 
1
Amey P Naik

subdate (now (), 1) gibt den Zeitstempel von gestern zurück .__ Der unten stehende Code wählt alle Zeilen mit dem Zeitstempel von gestern aus

Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
0
Dismi Paul