我需要检查两个日期是否与我的数据库中的另外两个日期重叠。
我的数据库看起来像这样
+----+--------------+------------+------------+
| id | code | StartDate | EndDate |
+----+--------------+------------+------------+
| 1 | KUVX-21-40 | 2013-10-23 | 2013-11-22 |
| 2 | UEXA286-1273 | 2013-10-30 | 2013-11-29 |
| 3 | UAJFAU-2817 | 2013-10-21 | 2013-11-20 |
| 4 | KUVX-21-40 | 2013-10-30 | 2013-11-29 |
+----+--------------+------------+------------+
在我的查询中,我指定范围:开始日期和结束日期让它们如下所示:
ScopeStartDate = "2013-10-1"
ScopeEndDate = "2013-11-26"
上面应该返回所有记录,因为所有记录都与时间跨度重叠。
但是我无法查询工作:/
我试过以下查询没有运气:
WHERE
(
(StartDate < ScopeStartDate AND StartDate > ScopeStartDate)
OR
(StartDate > ScopeStartDate AND EndDate < ScopeEndDate )
)
这给我两个结果:1和3
我究竟做错了什么?
我相信以下条件匹配每个可能的重叠情况。
WHERE
(
(ScopeStartDate <= EndDate AND ScopeEndDate >= StartDate)
)
除非您声明了不合逻辑的时间跨度(例如,那些在开始之前结束的时间)
这只是where子句。给定InputStartDate和InputEndDate由用户输入给出,DataStartDate和DataEndDate是表中的日期时间值:
where((DataEndDate> InputStartDate)和(DataStartDate <InputEndDate))
这是一个旧线程,但使用BETWEEN。这是我的时间段的摘录,加上根据您的需求进行修改......
$qs = "SELECT COUNT(*) AS `count` FROM `timeclock` WHERE `userid` = :userid
AND (
(`timein` BETWEEN :timein AND :timeout OR `timeout` BETWEEN :timein AND :timeout )
OR
(:timein BETWEEN `timein` AND `timeout` OR :timeout BETWEEN `timein` AND `timeout`)
);";