两个日期列之间的日期范围

时间:2013-09-18 11:44:44

标签: mysql

我有这两列:

start_dt                  end_dt
2013-09-18 14:00:00       2013-09-18 16:00:00 

我想选择这两个日期之间的行(在MYSQL中存储为日期时间),所以......

SELECT *
FROM task_schedule_times
WHERE `start_dt` >= "2013-09-18 14:00:00"
AND `end_dt` <= "2013-09-18 16:00:00"

这很好,但如果在start_dt和end_dt中搜索任何日期,我需要能够返回上面的行:

“2013-09-18 15:00:00 ” 和  “2013-09-18 15:30:00

视觉表示(该行代表时间间隔):

entry1: -----------------
select:     ---------

如果提供的日期范围落在行

的范围内,我还需要返回该行
entry1: -----------------
select:     ----------------------

entry1:          -----------------
select: -----------------

在这种情况下不应显示任何结果:

entry1:        -----------------
select: -------

希望这些创造性的输入能够用语言更好地解释事物。

3 个答案:

答案 0 :(得分:3)

entry start应始终为<=

select end

entry end应始终为>=

select start
SELECT *
FROM task_schedule_times
WHERE `start_dt` <= "2013-09-18 16:00:00"
AND `end_dt` >= "2013-09-18 14:00:00"

答案 1 :(得分:3)

听起来你正在寻找重叠的时间段。当一个启动而其他结束并且第二个开始后 时,两个句点重叠

SELECT *
FROM task_schedule_times
WHERE `end_dt` >= "2013-09-18 14:00:00" AND
      `start_dt` <= "2013-09-18 16:00:00"

答案 2 :(得分:2)

如果我理解正确,你正在寻找这样的事情:

SELECT * 
FROM `task_schedule_times`
WHERE (`start_dt` BETWEEN "2013-09-18 14:00:00" AND "2013-09-18 16:00:00")
OR (`end_dt` BETWEEN "2013-09-18 14:00:00" AND "2013-09-18 16:00:00")