TSQL SELECT предыдущих записей - PullRequest
18 голосов
/ 08 июня 2011

Я хочу выбрать все записи из таблицы Log, где значения поля DateAndTime (типа datetime) относятся к позавчерашнему дню, независимо от того, какой сегодня день.

Так что если сегодня2011-06-08, я хочу выбрать все строки, где DateAndTime больше или равно 2011-06-07 00:00:00, а также меньше 2011-06-08 00:00:00.

Я предполагаю, что потенциальная ловушка будетэто поведение в 1-й день месяца, так как очевидно, что дата типа 2011-06-00 недействительна и должна быть 2011-05-31.

Ответы [ 5 ]

27 голосов
/ 08 июня 2011

Для SQL Server 2008 вы можете использовать это.

select *
from [log]
where cast(DateAndTime as date) = cast(getdate()-1 as date)

До 2008 года вы можете использовать это

select *
from [log]
where DateAndTime >= dateadd(d, datediff(d, 0, getdate())-1, 0) and
      DateAndTime < dateadd(d, datediff(d, 0, getdate()), 0)

Относится к DBA: Актуальность приведена, но хорошая ли это идея?

3 голосов
/ 08 июня 2011
SELECT * FROM Log
WHERE DateAndTime >= DATEADD(DAY,-1, CAST(GETDATE() AS DATE))
AND DateAndTime < CAST(CAST(GETDATE() AS DATE) AS DATETIME)
1 голос
/ 08 июня 2011

В этом примере предполагается, что SQL Server:

select *
from log
where convert(varchar(8), DateAndTime , 112)  = convert(varchar(8), getdate()-1, 112)

По сути, конвертируйте дату в ггггммдд (параметр 112), а затем проверьте, что она равна вчерашней дате (getdate()-1), также преобразованной в ггггммдд.

0 голосов
/ 08 июня 2011

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

Declare @today date
Set @today = GETDATE()


Select YourcolumnNames from log
Where DateAndTime >= DATEADD(dd, -1, @today ) and DateAndTime < DATEADD(dd, -1, @today )

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

0 голосов
/ 08 июня 2011

Предполагается, что SQL Server

 declare @today date
 set @today = GETDATE()

 select * from Log where DateAndTime between DATEADD(dd, -1, @today ) and @today
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...