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