2011-03-11 41 views
4

这里有一个表:SQL查询,如果日期是接近今天

orders(id, item, deliveryDate, courier_id)

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

+0

什么数据库?你到目前为止尝试过什么吗? – 2011-03-12 00:00:39

+0

我相信这将取决于您使用的是哪个DBMS。 – JOTN 2011-03-12 00:02:18

回答

1

在T-SQL:

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

EDIT

虽然在该溶液中的周期被计算为粗略地一个月,它不是正好一个月份,如叔叔布拉德已经观察到整齐。如果您需要精确,则应从当前日期计算一个月,如下所示:DATEADD(month, 1, GETDATE())。这在上述查询中替换GETDATE() + 30

+1

不是每个月都有30天。你应该使用'dateadd(MONTH,1,getdate())'代替'getdate()+ 30'。 – 2011-03-17 20:13:55

+0

@uncle brad:不一定我应该。举例来说,如果我想将数据表示为一张图表,显示每一天在未来一段时间内将安排多少次交货,如果这段时间是固定的,那么在我看来,这似乎更有意义。不过,你的观点是有效的,因为我们实际上不知道这个案例的要求,所以我已经更新了我的答案。谢谢。 – 2011-03-17 20:55:47

1

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

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

(也标记为快递id的值?)

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

如果您的服务器不持有天 - 你可以看看它的日期转换函数

0

如果MySQL

DATE_ADD

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