Оператор SQL для выбора всех строк за предыдущий день - PullRequest
101 голосов
/ 01 октября 2009

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

Ответы [ 11 ]

182 голосов
/ 01 октября 2009

получите сегодня без времени:

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)
36 голосов
/ 01 октября 2009

Чтобы получить значение «сегодня» в 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())
16 голосов
/ 27 февраля 2015

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

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

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

8 голосов
/ 23 мая 2013
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
5 голосов
/ 13 марта 2012

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

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

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

4 голосов
/ 01 октября 2009

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

select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)
3 голосов
/ 01 апреля 2015

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

WHERE `date` = CURDATE() - INTERVAL 1 DAY
2 голосов
/ 11 августа 2015

В 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)
1 голос
/ 18 июня 2018

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

SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) = 
   dateadd(day,0, convert(date, getdate(), 105)) 
1 голос
/ 17 марта 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...