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

agu*_*and 1 mysql time

时间以'09:21 am'的形式存储在数据库中

现在我如何获得范围结果

例如

select * from tablename where stored_time between '09:21 am' and '10:05 pm';
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*ski 5

使用STR_TO_DATE()以下格式:

SELECT STR_TO_DATE(UPPER('09:21 am'), '%h:%i %p');
/* 09:21:00 */
Run Code Online (Sandbox Code Playgroud)

%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';
Run Code Online (Sandbox Code Playgroud)

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