在MySQL中,我可以编写一个查询来查找给定月份在两个日期之间是否有任何日期吗?

In MySQL can I write a query to find if a given month has any dates between two dates?

提问人:Andrew G. Johnson 提问时间:8/5/2012 最后编辑:Andrew G. Johnson 更新时间:8/5/2012 访问量:179

问:

对问题标题表示歉意,我很难表达这一点。通过示例要容易得多:

我有一个包含两个日期字段的表;start_date和end_date。虚拟数据:

+----+------------+------------+
| id | start_date | end_date   |
+----+------------+------------+
| 1  | 2012-01-10 | 2012-04-13 |
| 2  | 2012-02-09 | 2012-05-12 |
| 3  | 2012-03-08 | 2012-06-11 |
| 4  | 2012-04-07 | 2012-07-10 |
| 5  | 2012-05-06 | 2012-08-09 |
+----+------------+------------+

所以现在我有一个给定的月份,比如说 2012 年 3 月。有没有办法查看 2012 年 3 月是否属于 ID 2 的 start_date 和end_date?3 怎么样(3 有点不同,因为 2012 年 3 月的部分时间介于 start_date 和 end_date 之间,这很好,我们不需要整个月,部分很好)?

我一直坐在这里试图思考如何编写查询,但完全被难住了

MySQL的

评论


答:

2赞 aioobe 8/5/2012 #1

据我了解您的问题,您想检查每个日期范围是否与 2012 年 3 月有一些重叠。

  • A是 和 和 让的最大值<beginning of march>start_date

  • B是 和 的最小值<end of march>end_date

现在检查是否<.AB

评论

0赞 aioobe 8/5/2012
好。这是我的想法,是的。:-)
2赞 Shadow Wizard Is Sad And Angry 8/5/2012 #2

如果您可以使用确切的月份范围(即给出开始结束日的确切日期),则此类查询应该可以正常工作:

SELECT id FROM MyTable 
WHERE start_date <= '2012-03-31' 
AND end_date >= '2012-03-01' 

评论

1赞 aioobe 8/5/2012
但这需要整个月都在范围内,不是吗?
0赞 Shadow Wizard Is Sad And Angry 8/5/2012
@aioobe否,例如在示例行中,将返回 id 2。
0赞 Shadow Wizard Is Sad And Angry 8/5/2012
@biziclop非常整洁!不知道那个小提琴..:-)