检索MySQL中特定日期范围内发生的所有记录
我有一个包含多个合同的表,每个合同都有一个开始日期和一个结束日期,如下所示:检索MySQL中特定日期范围内发生的所有记录,mysql,Mysql,我有一个包含多个合同的表,每个合同都有一个开始日期和一个结束日期,如下所示: | ID | Contract Name | Start Date | End Date | |-------|-------------------|--------------|------------| | 1 | Joe Bloggs | 2012-01-01 | 2012-02-05 | | 2 | John Smiths | 2012-0
| 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 |
我试图做的是构建一个查询,该查询将检索在特定时间段之间处于活动状态的合同。因此,如果我的开始日期为2012-02-10
,结束日期为2012-03-21
,我应该显示以下合同:
| 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 c WHERE c.startdate >'2012-02-10' AND c.enddate < '2012-03-21'
从合同c中选择*,其中c.startdate>'2012-02-10'和c.enddate<'2012-03-21'
应该是这样的
SELECT *
FROM contracts c
WHERE c.startdate >= '2012-02-10'
AND c.enddate <= '2012-03-21'
选择*
来自合同c
其中c.startdate>='2012-02-10'
而c.enddateEr,时间是线性的,对吗
SELECT *
FROM contracts
WHERE end_date >= '2012-02-10'
AND start_date <= '2012-03-21';
选择*
从合同中
其中结束日期>='2012-02-10'
并从合同中选择*开始日期
其中(起始日期介于“2012-03-01”和“2013-03-21”之间)
或(截止日期介于“2012-03-01”和“2013-03-21”之间)
或(开始日期为2013年3月21日);
:输入日期之间开始的间隔记录。间隔的第一部分或全部可能包括在内
(END_DATE between '2012-03-01' AND '2013-03-21')
(START_DATE<= '2012-03-01' AND END_DATE >='2013-03-21')
:输入日期之间结束的间隔。间隔的最后一部分或全部可能包括在内
(END_DATE between '2012-03-01' AND '2013-03-21')
(START_DATE<= '2012-03-01' AND END_DATE >='2013-03-21')
(开始日期为2013-03-21')
:输入日期仅包含在一个间隔内ID=2开始日期早于您正在搜索的开始日期。
(END_DATE between '2012-03-01' AND '2013-03-21')
(START_DATE<= '2012-03-01' AND END_DATE >='2013-03-21')