时间以'09:21 am'
的形式存储在数据库中现在我如何获得范围结果
例如
select * from tablename where stored_time between '09:21 am' and '10:05 pm';
我尝试了上面的查询,但它没有正确地给出结果。这是因为时间存储为varchar。
是否有任何函数将此字符串转换为时间并在mysql中查询?
答案 0 :(得分:5)
使用STR_TO_DATE()
格式如下:
SELECT STR_TO_DATE(UPPER('09:21 am'), '%h:%i %p');
/* 09:21:00 */
%h
= 00-12小时
%i
=分钟
%p
=上午/下午(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
类型,而不是将值存储为字符串。
答案 1 :(得分:1)
您可以使用DATE_FORMAT(date,format)
。 Documentation
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');