我尝试在Stackoverflow和Google上搜索此内容,但没有找到任何内容,如果这是重复的话,我会很高兴,如果有人向我提出原始问题,我会很感激。
目前我有一个包含3列的表:id,starttime和endtime。然后,我使用查询预订,开始时间为10:30 10.10.2014,结束于2014年10月10日13:45,如下:
SELECT *
FROM reservations
WHERE ('2014-10-10 10:30:00' BETWEEN starttime AND endtime)
OR
('2014-10-10 13:45:00' BETWEEN starttime AND endtime)
OR
('2014-10-10 10:30:00' >= starttime AND '2014-10-10 13:45:00' <= endtime)
OR
('2014-10-10 10:30:00' <= starttime AND '2014-10-10 13:45:00' >= endtime);
因此查询检查该预留是否与任何现有预留冲突,然后返回冲突预留。但我希望它反过来并返回所有不与查询冲突的行。
我现在已经尝试解决这个问题很多个小时了,并希望能够帮助我找到正确的方向。
答案 0 :(得分:1)
我简化了您的查询(显示冲突):
SELECT *
FROM reservations
WHERE '2014-10-10 10:30:00' <= endtime
AND starttime <= '2014-10-10 13:45:00'
获取与查询日期不冲突的所有行:
SELECT *
FROM reservations
WHERE NOT ('2014-10-10 10:30:00' <= endtime
AND starttime <= '2014-10-10 13:45:00')
答案 1 :(得分:0)
试试这个:
select *
from reservations
where starttime >= '2014-10-10 10:40:00'
and endtime <= '2014-10-10 13:45:00'