我有这两列:
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: -------
希望这些创造性的输入能够用语言更好地解释事物。
答案 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")