SQL Select 基于当前日期减去两天的记录
SQL Select Records based on current date minus two days
我有一个订单 table,其中包含订单 ID、订单日期和订单描述。
我想 运行 一个 select 查询来捕获过去两天内创建的所有订单。所以当前日期减去两天。从 12 月 14 日开始,我想要 select 所有订单日期 > 12 月 13 日的订单。这需要使用获取日期函数来获取当前日期并减去天数。
我试过:
select * from orders where orderdate > getdate() - 2
但这并没有产生正确的结果。请问知道怎么做吗?
试试这个:
select * from orders where orderdate > cast(getdate() - 1 as date)
你应该尝试使用 dateadd
函数
select * from orders where orderdate > dateadd(dd,-1,cast(getdate() as date))
现在这可能正是您所需要的,但是您需要了解,通过强制转换为日期,我们删除了时间部分并有效地返回到一天的开始,而在它后面的一天 (-1) 给出了开始昨天
看来 dateadd 和 convert 可以解决问题。
select o.*
from orders o
where o.orderdate >= dateadd(day, -2, convert(date, getdate()))
如果您想要最近两天的订单,请使用 DATEADD
将天数添加到今天的日期(在您的情况下为 -2 天),然后使用 DATEDIFF
比较这两天:
SELECT * FROM orders
WHERE DATEDIFF(DAY, DATEADD(DAY, -2, GETDATE()), orderdate) > 0
现在,假设所有订单都有过去的日期和 none 未来的日期(应该是这样),您可以像这样简单地使用 DATEDIFF
:
SELECT * FROM orders
WHERE DATEDIFF(DAY, orderdate, GETDATE()) <= 2
注意:您可以使用 < 3
代替 <= 2
。
我有一个订单 table,其中包含订单 ID、订单日期和订单描述。
我想 运行 一个 select 查询来捕获过去两天内创建的所有订单。所以当前日期减去两天。从 12 月 14 日开始,我想要 select 所有订单日期 > 12 月 13 日的订单。这需要使用获取日期函数来获取当前日期并减去天数。
我试过:
select * from orders where orderdate > getdate() - 2
但这并没有产生正确的结果。请问知道怎么做吗?
试试这个:
select * from orders where orderdate > cast(getdate() - 1 as date)
你应该尝试使用 dateadd
函数
select * from orders where orderdate > dateadd(dd,-1,cast(getdate() as date))
现在这可能正是您所需要的,但是您需要了解,通过强制转换为日期,我们删除了时间部分并有效地返回到一天的开始,而在它后面的一天 (-1) 给出了开始昨天
看来 dateadd 和 convert 可以解决问题。
select o.*
from orders o
where o.orderdate >= dateadd(day, -2, convert(date, getdate()))
如果您想要最近两天的订单,请使用 DATEADD
将天数添加到今天的日期(在您的情况下为 -2 天),然后使用 DATEDIFF
比较这两天:
SELECT * FROM orders
WHERE DATEDIFF(DAY, DATEADD(DAY, -2, GETDATE()), orderdate) > 0
现在,假设所有订单都有过去的日期和 none 未来的日期(应该是这样),您可以像这样简单地使用 DATEDIFF
:
SELECT * FROM orders
WHERE DATEDIFF(DAY, orderdate, GETDATE()) <= 2
注意:您可以使用 < 3
代替 <= 2
。