我正在管理10年前设计的用于预订课程的系统。
数据结构将startTime
保存为字符串,格式为YYYYmmDDHHMM
,格式与课程endTime
相同。
如何运行查询以使我将来只能在HHMM
(0930或1630)上预订所有课程?
该课程可能长达一个小时,并且从09:00
到10:00
进行了预定,因此,如果我将搜索时间设为09:30
,则该课程也应返回。
谢谢
答案 0 :(得分:2)
您可以结合使用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')))