对问题标题道歉我很难说明这一点。通过示例更容易:
我有一个包含两个日期字段的表; 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之间,这很好,我们不需要整个月,部分都很好)?
我一直坐在这里试图想出如何写一个查询而且完全难倒
答案 0 :(得分:2)
据我了解你的问题,你想检查每个日期范围是否与2012年3月有一些重叠。
让
A
是<beginning of march>
和start_date
的最大值,让
B
是最低<end of march>
和end_date
现在检查是否A
&lt; B
。
答案 1 :(得分:2)
如果你可以使用确切的月份范围(即给出开始结束日的确切日期),那么这样的查询应该可以正常工作:
SELECT id FROM MyTable
WHERE start_date <= '2012-03-31'
AND end_date >= '2012-03-01'