SQL Select Records на основе текущей даты минус два дня

У меня есть таблица заказов, которая содержит идентификатор заказа, дату заказа и описание заказа.

Я хочу запустить запрос выбора, который фиксирует все заказы, созданные за последние два дня. так что текущая дата минус два дня. с 14 декабря я хотел бы выбрать все заказы, дата заказа которых> 13 декабря. Для этого необходимо использовать функцию Get date, чтобы получить текущую дату за вычетом дней.

Я пытался:

select * from orders where orderdate > getdate() - 2 

но это не дает правильных результатов. Есть идеи, как это сделать?


person Emma    schedule 14.12.2017    source источник


Ответы (4)


вам следует попробовать использовать функцию dateadd

select * from orders where orderdate > dateadd(dd,-1,cast(getdate() as date))

Это может быть именно то, что вам нужно, но тогда вам нужно понимать, что при приведении к дате мы удаляем часть времени и фактически возвращаемся к началу дня, а день после него (-1) дает начало вчерашнего дня.

person DhruvJoshi    schedule 14.12.2017
comment
Это сработало, спасибо и спасибо за объяснение, это поможет в будущем! - person Emma; 14.12.2017

Попробуй это:

select * from orders where orderdate > cast(getdate() - 1 as date)
person Niranjan Rajawat    schedule 14.12.2017
comment
В течение многих лет я использовал dateadd (день .., без всякой причины. Спасибо! select * from orders where orderdate > getdate() - 1 тоже работает, без приведения !! - person AJ AJ; 20.12.2020

Если вам нужны заказы за последние два дня, используйте DATEADD, чтобы добавить дни к сегодняшней дате (в вашем случае -2 дня), затем используйте DATEDIFF для сравнения двух дней:

SELECT * FROM orders
WHERE DATEDIFF(DAY, DATEADD(DAY, -2, GETDATE()), orderdate) > 0

Теперь, предполагая, что все заказы имеют даты в прошлом и ни одного в будущем (что и должно быть), вы можете просто использовать DATEDIFF следующим образом:

SELECT * FROM orders
WHERE DATEDIFF(DAY, orderdate, GETDATE()) <= 2

Примечание: вы можете использовать < 3 вместо <= 2.

person Racil Hilan    schedule 14.12.2017
comment
Спасибо за помощь! - person Emma; 14.12.2017

Похоже, dateadd и convert решат проблему.

select   o.*
from     orders o
where    o.orderdate >= dateadd(day, -2, convert(date, getdate()))
person StelioK    schedule 14.12.2017