【问题标题】:MySQL query to select nearest time from 12hrs time formatMySQL查询从12小时时间格式中选择最近的日期
【发布时间】:2020-05-22 11:21:56
【问题描述】:

我想通过比较传递给它的特定时间来获得最近的时间我为它编写了 mysql 查询,但它没有按照预期工作,下面是我的查询与不同的案例。请建议我解决方案

表:

id  date        time
1   2018-02-06  09:00 pm
2   2018-02-05  09:30 pm
3   2018-02-06  09:00 am
4   2018-02-07  10:00 am

测试用例 1:

SELECT *
FROM `table`
WHERE `date` = '2018-02-06'
AND `time` >= '08:16 am'
ORDER BY `time` ASC
LIMIT 1

预期输出:

id  date        time
3   2018-02-06  09:00 am

测试用例 2:

SELECT *
FROM `table`
WHERE `date` = '2018-02-06'
AND `time` >= '08:16 pm'
ORDER BY `time` ASC
LIMIT 1

预期输出:

id  date        time
1   2018-02-06  09:00 pm

【问题讨论】:

  • time开头的存储时间。
  • TIME MySQL 中的数据类型不能存储类似于09:30 pm 的值。所以显示源表的 CREATE TABLE...

标签: mysql datetime time


【解决方案1】:

分别比较日期和时间部分是一件很痛苦的事情。我建议将日期和时间存储为单个 datetime 列。话虽如此,您始终可以使用STR_TO_DATE 将字符串转换为日期时间:

select *
from t
where str_to_date(CONCAT(date, ' ', time), '%Y-%m-%d %h:%i %p') >= '2018-02-06 08:16' -- <- proper date
order by str_to_date(CONCAT(date, ' ', time), '%Y-%m-%d %h:%i %p')
limit 1

【讨论】:

  • Salman A 但我需要基于分离的吃时间列和时间列结构的解决方案是 varchar 因为我必须像上午 09:00、下午 07:00 一样存储上午/下午
  • @msp 有人删除了我的(有效)评论。无论如何,上述解决方案仍然适用于您的设计。您只需要指定2018-02-06 08:16 而不是两个单独的2018-02-0608:16 pm
猜你喜欢
  • 2020-11-17
  • 2015-02-08
  • 2020-07-05
  • 1970-01-01
  • 2018-07-30
  • 2012-03-06
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多