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


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

10 91

10 ответов:

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

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

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

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)

чтобы получить значение "сегодня" в 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())

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ну, его легче привести столбец datetime к дате и сравнению.

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