使用LIKE将MySQL字符串搜索为日期

时间:2018-10-31 04:20:18

标签: mysql

我正在管理10年前设计的用于预订课程的系统。

数据结构将startTime保存为字符串,格式为YYYYmmDDHHMM,格式与课程endTime相同。

如何运行查询以使我将来只能在HHMM(0930或1630)上预订所有课程?

该课程可能长达一个小时,并且从09:0010:00进行了预定,因此,如果我将搜索时间设为09:30,则该课程也应返回。

谢谢

1 个答案:

答案 0 :(得分:2)

您可以结合使用STR_TO_DATERIGHT

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')))