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
.
Ответы
Ответ 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. Это может повысить производительность