我有一个订单表,其中包含订单ID,订单日期和订单说明。
我想运行一个选择查询,该查询捕获过去两天内创建的所有订单。所以当前日期减去两天。从12月14日起,我想要选择订单日期> 1的所有订单。 12月13日。这需要使用获取日期功能来获取当前日期并减去日期。
我试过了:
select * from orders where orderdate > getdate() - 2
但这并没有产生正确的结果。请问有什么想法吗?
答案 0 :(得分:8)
你应该尝试使用dateadd
功能
select * from orders where orderdate > dateadd(dd,-1,cast(getdate() as date))
现在这可能正是你所需要的,但是你需要明白,通过铸造到目前为止我们删除时间部分并有效地回到当天的开始和它后面的一天(-1)给出了昨天的开始。
答案 1 :(得分:2)
如果您想要过去两天的订单,请使用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
。
答案 2 :(得分:1)
试试这个:
select * from orders where orderdate > cast(getdate() - 1 as date)
答案 3 :(得分:1)
看起来dateadd和convert会解决问题。
select o.*
from orders o
where o.orderdate >= dateadd(day, -2, convert(date, getdate()))