如何查询时间是否存储为varchar?

时间:2012-07-13 13:02:15

标签: mysql time

时间以'09:21 am'

的形式存储在数据库中

现在我如何获得范围结果

例如

select * from tablename where stored_time between '09:21 am' and '10:05 pm';

我尝试了上面的查询,但它没有正确地给出结果。这是因为时间存储为varchar。

是否有任何函数将此字符串转换为时间并在mysql中查询?

2 个答案:

答案 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';

建议您将此列切换为实际TIMEDATETIME类型,而不是将值存储为字符串。

答案 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');