Ответы:
получить сегодня некогда:
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)
SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0)
получаю:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
Чтобы получить значение «сегодня» в 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) представляет собой дату и время с меткой времени, можно использовать следующий запрос:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Это можно легко изменить на сегодня, в прошлом месяце, в прошлом году и т. Д.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
что он должен оценивать DATEDIFF () в каждой строке
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
Это действительно старая тема, но вот мое мнение о ней. Вместо двух разных предложений, одно больше и меньше. Я использую этот синтаксис ниже для выбора записей из даты A. Если вам нужен диапазон дат, вам подойдут предыдущие ответы.
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
В приведенном выше случае X будет -1 для вчерашних записей.
Это должно сделать это:
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))
SELECT *
все даты будут возвращены с исходным временем.