SQL 根据当前日期减去两天选择记录
Posted
技术标签:
【中文标题】SQL 根据当前日期减去两天选择记录【英文标题】:SQL Select Records based on current date minus two days 【发布时间】:2017-12-14 16:41:07 【问题描述】:我有一个订单表,其中包含订单 ID、订单日期和订单描述。
我想运行一个选择查询来捕获过去两天内创建的所有订单。所以当前日期减去两天。从 12 月 14 日起,我想选择订单日期大于 12 月 13 日的所有订单。这需要使用获取日期函数来获取当前日期并减去天数。
我试过了:
select * from orders where orderdate > getdate() - 2
但这不会产生正确的结果。请问有什么办法吗?
【问题讨论】:
在 where 子句中使用 convert( varchar(10), orderdate,120) = convert( varchar(10), getdate()-2,120) SQL statement to select all rows from previous day的可能重复 您自相矛盾:“在过去两天之前创建”与“从 12 月 14 日开始,我想选择订单日期大于 12 月 13 日的所有订单”。如果日期大于 13 日,那不是“之前”。 【参考方案1】:你应该尝试使用dateadd
函数
select * from orders where orderdate > dateadd(dd,-1,cast(getdate() as date))
现在这可能正是您所需要的,但是您需要了解,通过转换为日期,我们删除了时间部分并有效地回到一天的开始,而它后面的一天(-1)给出了昨天的开始。
【讨论】:
已经成功了,谢谢你的解释,这对以后有帮助!【参考方案2】:试试这个:
select * from orders where orderdate > cast(getdate() - 1 as date)
【讨论】:
多年来我一直使用 dateadd(day .. ,无缘无故。谢谢!select * from orders where orderdate > getdate() - 1
也可以,没有演员表!!【参考方案3】:
如果您想要最近两天的订单,请使用 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
。
【讨论】:
感谢您的帮助!【参考方案4】:看起来 dateadd 和 convert 可以解决问题。
select o.*
from orders o
where o.orderdate >= dateadd(day, -2, convert(date, getdate()))
【讨论】:
以上是关于SQL 根据当前日期减去两天选择记录的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL 中加入表后,通过从当前日期中减去日期列来创建新列