Szukam dobrej instrukcji SQL, aby wybrać wszystkie wiersze z poprzedniego dnia z jednej tabeli. Tabela zawiera jedną kolumnę z datą i godziną. Używam SQL Server 2005.
Szukam dobrej instrukcji SQL, aby wybrać wszystkie wiersze z poprzedniego dnia z jednej tabeli. Tabela zawiera jedną kolumnę z datą i godziną. Używam SQL Server 2005.
Odpowiedzi:
dziś nie ma czasu:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
pobierz wczoraj bez czasu:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
zapytanie dla wszystkich wierszy tylko z wczoraj:
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)
otrzymuję:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
Aby uzyskać wartość „dzisiaj” w języku SQL:
convert(date, GETDATE())
Aby otrzymać „wczoraj”:
DATEADD(day, -1, convert(date, GETDATE()))
Aby otrzymać „dzisiaj minus X dni”: zmień -1 na -X.
Więc dla wszystkich wczorajszych wierszy otrzymujesz:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
Wygląda na to, że brakowało oczywistej odpowiedzi. Aby uzyskać wszystkie dane z tabeli (Ttable), w której kolumna (DatetimeColumn) jest datą i godziną z sygnaturą czasową, można użyć następującego zapytania:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Można to łatwo zmienić na dziś, w zeszłym miesiącu, w zeszłym roku itp.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
ponieważ musi oceniać DATEDIFF () w każdym wierszu
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
To naprawdę stary wątek, ale oto moje podejście. Zamiast 2 różnych klauzul, jedną większą niż i mniejszą niż. Używam poniższej składni do wybierania rekordów z daty. Jeśli chcesz określić zakres dat, najlepsze są poprzednie odpowiedzi.
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
W powyższym przypadku X wyniesie -1 dla wczorajszych rekordów
To powinno wystarczyć:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
W SQL Server wykonaj następujące czynności:
where cast(columnName as date) = cast(getdate() -1 as date)
Należy rzutować obie strony wyrażenia do tej pory, aby uniknąć problemów z formatowaniem czasu.
Jeśli potrzebujesz bardziej szczegółowo kontrolować interwał, powinieneś spróbować czegoś takiego:
declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
Innym sposobem na powiedzenie „wczoraj” ...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
To prawdopodobnie nie zadziała dobrze 1 stycznia, a także pierwszego dnia każdego miesiąca. Ale w locie jest skuteczny.
Cóż, łatwiej jest rzutować kolumnę z datą i godziną do tej pory, a niż porównywać.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
subdate (now (), 1) zwróci wczorajszy znacznik czasu Poniższy kod wybierze wszystkie wiersze z wczorajszym znacznikiem czasu
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
SELECT *
zwróci wszelkie daty z ich oryginalnymi godzinami.