【发布时间】:2011-03-11 23:56:25
【问题描述】:
这是一张桌子:
orders(id, item, deliveryDate, courier_id)
我想编写一个查询,该查询将返回给定快递员的所有订单,其交货日期在今天一个月内。我该怎么做?
【问题讨论】:
-
什么数据库?到目前为止,您尝试过什么吗?
-
我相信这将取决于您使用的 DBMS。
这是一张桌子:
orders(id, item, deliveryDate, courier_id)
我想编写一个查询,该查询将返回给定快递员的所有订单,其交货日期在今天一个月内。我该怎么做?
【问题讨论】:
大多数服务器使用日期的整数部分表示天数。
在本例中,我使用“Now()”作为返回当前日期的服务器函数。 您应该在您使用的服务器的文档中查找正确的文档。
(也是 ? 标记作为 courier id 的值)
Select *
From orders
Where Now() - deliveryDate < 30
And courier_id = ?
如果您的服务器不保存天数 - 您可以查看它的日期转换函数
【讨论】:
在 T-SQL 中:
SELECT *
FROM orders
WHERE deliveryDate BETWEEN GETDATE() AND GETDATE() + 30
AND courier_id = @CourierID
编辑
虽然这个解决方案中的周期被计算为大约一个月,但它并不完全是一个月,正如 brad 叔叔 巧妙地观察到的那样。如果你需要精确,你应该像这样从当前日期计算一个月:DATEADD(month, 1, GETDATE())。这将替换上述查询中的GETDATE() + 30。
【讨论】:
dateadd(MONTH,1,getdate()) 代替getdate() + 30。
如果是 MySQL
SELECT * FROM orders WHERE deliveryDate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 1 MONTH);
【讨论】: