我正在管理一个10年前为预订课程而设计的系统。
数据结构将startTime
保存为格式为YYYYmmDDHHMM
且格式与课程endTime
相同的字符串。
我如何运行一个查询,该查询可以让我在未来仅在HHMM
(0930或1630(预订所有课程?
这节课可能有一个小时长,从09:00
到10:00
都有预订,所以如果我把搜索时间设置为09:30
,这节课也应该返回。
谢谢
您可以使用STR_TO_DATE
和RIGHT
:的组合
SELECT ...
WHERE STR_TO_DATE(startTime, '%Y%m%d%H%i') > CURDATE() AND
(RIGHT(startTime, 4) = '0930' OR RIGHT(startTime, 4) = '1630')
更新
寻找可能与所需时间重叠的课程(例如,从上午9点到上午10点的课程(有点复杂。基本上,我们还需要获得值的time
部分,并在9:30或16:30左右检查它,例如
SELECT ...
WHERE STR_TO_DATE(startTime, '%Y%m%d%H%i') > CURDATE() AND
('09:30' BETWEEN TIME(STR_TO_DATE(startTime, '%Y%m%d%H%i')) AND TIME(STR_TO_DATE(endTime, '%Y%m%d%H%i')) OR
'16:30' BETWEEN TIME(STR_TO_DATE(startTime, '%Y%m%d%H%i')) AND TIME(STR_TO_DATE(endTime, '%Y%m%d%H%i')))