【问题标题】:In MySQL can I write a query to find if a given month has any dates between two dates?在 MySQL 中,我可以编写一个查询来查找给定月份是否有两个日期之间的任何日期?
【发布时间】:2012-08-02 16:55:59
【问题描述】:

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

我有一个包含两个日期字段的表格;开始日期和结束日期。虚拟数据:

+----+------------+------------+
| 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


    【解决方案1】:

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

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

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

    现在检查A B。

    【讨论】:

    • 不错。那是我的想法,是的。 :-)
    【解决方案2】:

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

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

    【讨论】:

    • 但这需要整个月份都在范围内,不是吗?
    • @aioobe 否,例如在示例行中,将返回 id 2。
    • @biziclop 非常整洁!不知道那个小提琴.. :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多