1

时间在数据库中存储为“09:21 am”

现在我怎样才能得到范围结果

例如

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

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

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

4

2 回答 2

5

使用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';

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

于 2012-07-13T13:05:21.173 回答
1

你可以利用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');
于 2012-07-13T13:09:29.473 回答