mysql - 使用 LIKE 将 MySql 字符串搜索为日期
问题描述
我正在管理一个 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')))
推荐阅读
- python - 在 Microsoft Edge 中使用 python selenium
- python - 有条件地子集数据框
- excel - 使用 VBA 宏将数据从一个 Excel 工作簿提取到另一个工作簿 - 错误 #9
- c++ - SFINAE 有别名,重载问题
- python - 如何打印可以被 3 和 5 整除的 0 到 100 的数字?
- c# - 在 UWP PasswordBox 中过滤字符的正确方法是什么?
- javascript - 父状态更新后如何仅在子组件中调用一次方法
- c# - 用于搜索和替换流的 Knuth Morris Pratt 搜索算法
- android - 有没有办法在Android中调用snackbar.make()?
- jenkins - 在 Jenkins 中,如何连续并行运行脚本直到构建完成?