时间在数据库中存储为“09:21 am”
现在我怎样才能得到范围结果
例如
select * from tablename where stored_time between '09:21 am' and '10:05 pm';
我尝试了上述查询,但没有正确给出结果。这是因为时间存储为 varchar。
是否有任何函数可以将此字符串转换为时间并在 mysql 中查询?
使用STR_TO_DATE()
以下格式:
SELECT STR_TO_DATE(UPPER('09:21 am'), '%h:%i %p');
/* 09:21:00 */
%h
= 小时 00-12
%i
= 分钟
%p
= AM/PM(UPPER()
转换为大写,以便与您的小写版本匹配)
所以完整的查询:
SELECT *
FROM tablename
WHERE
/* Use 24h time for the comparison values and wrap stored_time in the STR_TO_DATE() */
STR_TO_DATE(UPPER(stored_time)) between '09:21:00' and '22:05:00';
建议您将此列切换为实数TIME
或DATETIME
类型,而不是将值存储为字符串。
你可以利用DATE_FORMAT(date,format)
. 文档
select * from tablename where DATE_FORMAT(stored_time,'%h:%i %p') between
DATE_FORMAT('09:21 am','%h:%i %p') and DATE_FORMAT('10:05 pm','%h:%i %p');