代码之家  ›  专栏  ›  技术社区  ›  Mike Ross B.Kocis

MySql字符串作为日期搜索使用LIKE

  •  -2
  • Mike Ross B.Kocis  · 技术社区  · 6 年前

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

    数据结构保存 startTime YYYYmmDDHHMM 与课程格式相同 endTime

    我怎样才能运行一个查询,它可以让我在 HHMM (0930或1630)仅限将来?

    这堂课可能要一个小时,从 09:00 10:00 09:30 这一课也应该上。

    谢谢你

    1 回复  |  直到 6 年前
        1
  •  2
  •   Nick    6 年前

    你可以结合使用 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')))