小弟最近在做一个类似电影票定位的系统,有一个查询是查询客户选择的开始时间和时长(注意不是结束时间)
现在想查询两个时间段相交的记录,在CSDN查到了这篇文章https://blog.csdn.net/a312024054/article/details/76786739,用的第二种方式,伪SQL语句如下:
SELECT * FROM xxx WHERE NOT ((endTime < begin) OR (startTime > end));
数据库的字段 start_time, end_time
输入的字段 a,b
我的表字段
START_TIME——开始时间
DURATION——时长
跟他的情况略有不同:
1.我的START_TIME是varchar类型
2.我没有endTime,而是DURATION(int类型)
所以我是拿开始时间 + 时长得到结束时间的
于是我的SQL语句如下:
SELECT START_TIME,DURATION FROM BT_ORDER WHERE NOT
(
(date_add(str_to_date(START_TIME, '%H:%i'),interval DURATION minute) < str_to_date('18:00', '%H:%i'))
or
(str_to_date(START_TIME, '%H:%i') > date_add(str_to_date('18:00', '%H:%i'),interval 60 minute))
)
ORDER BY START_TIME ASC;
但是这样,查询出了三条记录:
START_TIME,DURATION
'17:00','60'
'18:00','60'
'19:00','105'
其中第一条和第三条不应该出现呀????