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

注意:您可以使用&lt; 3 代替&lt;= 2

【讨论】:

感谢您的帮助!【参考方案4】:

看起来 dateadd 和 convert 可以解决问题。

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

【讨论】:

以上是关于SQL 根据当前日期减去两天选择记录的主要内容,如果未能解决你的问题,请参考以下文章

在 where 子句中从当前日期减去 30 天

在 SQL 中加入表后,通过从当前日期中减去日期列来创建新列

Sql server DATEADD日期函数的使用

SQL 中怎么根据出生日期算出年龄 然后用年龄查询

转换以字符串格式存储的日期值并减去 mongodb 中的当前日期

如何根据日期选择组中的单行?