mysql - 检索MySQL中特定日期范围内发生的所有记录

标签 mysql

我有一个包含多个契约(Contract)的表,每个契约(Contract)都有一个开始日期和一个结束日期,如下所示:

|  ID   |   Contract Name   |  Start Date  |  End Date  |
|-------|-------------------|--------------|------------|
|   1   |  Joe Bloggs       |  2012-01-01  | 2012-02-05 |
|   2   |  John Smiths      |  2012-02-01  | 2012-02-20 |
|   3   |  Johnny Briggs    |  2012-03-01  | 2012-03-20 |

我想做的是构建一个查询,以检索在特定时间段内有效的契约(Contract)。因此,如果我有 2012-02-10 的开始日期和 2012-03-21 的结束日期,我应该显示以下契约(Contract):

|  ID   |   Contract Name   |  Start Date  |  End Date  |
|-------|-------------------|--------------|------------|
|   2   |  John Smiths      |  2012-02-01  | 2012-02-20 |
|   3   |  Johnny Briggs    |  2012-03-01  | 2012-03-20 |

但我的问题是我不知道如何构建查询来执行此操作。这是我到目前为止所得到的:

SELECT *
FROM contracts c
WHERE c.startdate BETWEEN '2012-02-10'
    AND '2012-03-21'
    AND c.enddate BETWEEN '2012-02-10'
    AND '2012-03-21'

但这不起作用,没有检索到任何记录。我做错了什么?

最佳答案

SELECT * FROM contracts
                WHERE (START_DATE between '2012-03-01' AND '2013-03-21')
                OR (END_DATE between '2012-03-01' AND '2013-03-21')
                OR (START_DATE<= '2012-03-01' AND END_DATE >='2013-03-21');

Check the SQL fiddle

关于mysql - 检索MySQL中特定日期范围内发生的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15521175/

相关文章:

mysql - 在mysql if语句中使用别名

mysql - SQL在具有多个条件的选择中对行进行排序

MySQL SELECT 里面有另一个 SELECT

MySQL 查询 - 每个订单的平均行数,每月

javascript - 使用 .hide() jquery 后 Div 重新出现

MySQL PASSWORD() 函数和 SpringSecurity ShaPasswordEncoder

php - 当指定 SELECT FROM row 时 MySQL 返回数组

php - where_in 只返回 1 行

MySQL分组汇总

mysql - 我在 Mysql 数据库上有两个触发器,但我只能使用 SHOW TRIGGERS 列出一个