【问题标题】:SQL query to check if a date is close to today用于检查日期是否接近今天的 SQL 查询
【发布时间】:2011-03-11 23:56:25
【问题描述】:

这是一张桌子:

orders(id, item, deliveryDate, courier_id)

我想编写一个查询,该查询将返回给定快递员的所有订单,其交货日期在今天一个月内。我该怎么做?

【问题讨论】:

  • 什么数据库?到目前为止,您尝试过什么吗?
  • 我相信这将取决于您使用的 DBMS。

标签: sql tsql datetime date


【解决方案1】:

大多数服务器使用日期的整数部分表示天数。

在本例中,我使用“Now()”作为返回当前日期的服务器函数。 您应该在您使用的服务器的文档中查找正确的文档。

(也是 ? 标记作为 courier id 的值)

Select * 
From orders
Where Now() - deliveryDate < 30
And courier_id = ?

如果您的服务器不保存天数 - 您可以查看它的日期转换函数

【讨论】:

    【解决方案2】:

    在 T-SQL 中:

    SELECT *
    FROM orders
    WHERE deliveryDate BETWEEN GETDATE() AND GETDATE() + 30
      AND courier_id = @CourierID
    

    编辑

    虽然这个解决方案中的周期被计算为大约一个月,但它并不完全是一个月,正如 brad 叔叔 巧妙地观察到的那样。如果你需要精确,你应该像这样从当前日期计算一个月:DATEADD(month, 1, GETDATE())。这将替换上述查询中的GETDATE() + 30

    【讨论】:

    • 不是每个月都有 30 天。您应该使用dateadd(MONTH,1,getdate()) 代替getdate() + 30
    • @uncle brad:不一定我应该这样做。例如,如果我想将数据表示为一个图表,显示在接下来的时间段内每天安排了多少交付,那么在我看来,如果该时间段是固定的,则更有意义。不过,您的观点是有效的,因为我们实际上不知道这种情况的要求,所以我更新了我的答案。谢谢。
    【解决方案3】:

    如果是 MySQL

    DATE_ADD

    SELECT * FROM orders WHERE deliveryDate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 1 MONTH);
    

    【讨论】:

      猜你喜欢
      • 2016-12-16
      • 1970-01-01
      • 2018-04-05
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多