Инструкция SQL для выбора всех строк из предыдущего дня
Я ищу хороший оператор SQL, чтобы выбрать все строки из предыдущего дня из одной таблицы. Таблица содержит один столбец datetime. Я использую SQL Server 2005.
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
Это может легко быть изменено, чтобы сегодня, в прошлом месяце, в прошлом году, и т. д.
это действительно старая нить, но вот мой взгляд на нее. Вместо 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)
в 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)