首页 > 解决方案 > 使用 LIKE 将 MySql 字符串搜索为日期

问题描述

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

数据结构以与课程相同startTime的格式保存为字符串。YYYYmmDDHHMMendTime

HHMM我怎样才能运行一个查询,它可以让我在将来(0930 或 1630)预订所有课程?

这节课可能长达一个小时,从09:00到预订10:00,所以如果我把搜索时间作为09:30这节课也应该返回。

谢谢

标签: mysql

解决方案


您可以使用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')))

推荐阅读