Подтвердить что ты не робот

TSQL SELECT предыдущие записи

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Связано с DBA: На сегодняшний день доступно продвижение, но это хорошая идея?

Ответ 2

SELECT * FROM Log
WHERE DateAndTime >= DATEADD(DAY,-1, CAST(GETDATE() AS DATE))
AND DateAndTime < CAST(CAST(GETDATE() AS DATE) AS DATETIME)

Ответ 3

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

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

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

Ответ 4

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

 declare @today date
 set @today = GETDATE()

 select * from Log where DateAndTime between DATEADD(dd, -1, @today ) and @today

Ответ 5

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

Declare @today date
Set @today = GETDATE()


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

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