0

我有这两列:

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

希望这些创造性的投入比我能用文字更好地解释事情。

4

3 回答 3

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"
于 2013-09-18T11:50:01.157 回答
3

听起来您正在寻找重叠的时间段。当一个在另一个结束之前开始并且第一个在第二个开始之后结束时,两个时期重叠:

SELECT *
FROM task_schedule_times
WHERE `end_dt` >= "2013-09-18 14:00:00" AND
      `start_dt` <= "2013-09-18 16:00:00"
于 2013-09-18T11:50:41.100 回答
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")
于 2013-09-18T11:58:19.953 回答