Оператор SQL для выбора всех строк с предыдущего дня

Я ищу хорошую инструкцию SQL для выбора всех строк из предыдущего дня из одной таблицы. Таблица содержит один столбец datetime. Я использую SQL Server 2005.

Ответ 1

Сегодня нет времени:

SELECT dateadd(day,datediff(day,0,GETDATE()),0)

получить yestersday нет времени:

SELECT dateadd(day,datediff(day,1,GETDATE()),0)

запрос для всех строк только вчера:

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

Ответ 2

Чтобы получить значение "today" в SQL:

convert(date, GETDATE())

Чтобы получить "вчера":

DATEADD(day, -1, convert(date, GETDATE()))

Чтобы получить "сегодня минус X дней": измените значение -1 на -X.

Итак, для всех вчерашних строк вы получаете:

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

Ответ 3

Кажется, очевидный ответ отсутствовал. Чтобы получить все данные из таблицы (Ttable), где столбец (DatetimeColumn) - это дата-время с меткой времени, можно использовать следующий запрос:

SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday

Это можно легко изменить сегодня, в прошлом месяце, в прошлом году и т.д.

Ответ 4

SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);

Ответ 5

Это действительно старая нить, но вот мой подход к ней. Вместо 2 разных предложений, один больше, чем и меньше. Я использую этот ниже синтаксис для выбора записей из даты. Если вам нужен диапазон дат, тогда предыдущие ответы - путь.

SELECT * FROM TABLE_NAME WHERE 
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0

В приведенном выше случае X будет -1 для вчерашних записей

Ответ 6

Не удается проверить его прямо сейчас, но:

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

Ответ 7

Это должно сделать это:

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

Ответ 8

В SQL Server выполните следующие действия:

where cast(columnName as date) = cast(getdate() -1 as date)

Вы должны использовать обе стороны выражения на сегодняшний день, чтобы избежать проблем с форматированием времени.

Если вам нужно более детально контролировать интервал, попробуйте что-то вроде:

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

Ответ 9

Еще один способ рассказать об этом "Вчера"...

Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))

Это, очевидно, не будет работать хорошо 1 января, а также в первый день каждого месяца. Но на лету это эффективно.

Ответ 10

Что ж, проще привести столбец datetime к дате и сравнить.

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

Ответ 11

subdate (now(), 1) вернет метку времени вчерашнего дня. Приведенный ниже код выберет все строки с меткой времени вчерашнего дня.

Select * FROM 'login' WHERE 'dattime' <= subdate(now(),1) AND 'dattime' > subdate(now(),2)