【问题标题】:Query VARCHAR time range more than 2 hours 0 rows returned?查询VARCHAR时间范围超过2小时返回0行?
【发布时间】:2020-09-15 15:32:41
【问题描述】:

我有一个带有 time 列字符串的 MYSQL 表,如下所示

time
-------
8:00:00
8:15:00
8:30:00
8:45:00

我目前在执行从 n 到 N 的时间范围的查询时遇到问题。

当我执行查询时它工作

SELECT [column_name] 
FROM [table_name] 
WHERE date= "31-Jul-2018" 
and analytic_id =1 
and  time>="8:00:00" 
and time<="9:00:00";` 

并准确返回 8 和 9 之前的值。

但是当我执行如下查询时

SELECT [column_name] 
FROM [table_name] 
WHERE date= "31-Jul-2018" 
and analytic_id =1 
and  time>="8:00:00" 
and time<="10:00:00"; 

`

它没有返回。

这是为什么呢?

【问题讨论】:

  • 如果您将"sort" 1 到 10 作为字符串,您将得到1,10,2,3,4,5,6,7,8,9。这就是为什么 8 到 9 是正确的,但
  • 有一个 TIME 数据类型是有原因的。
  • 同意每个人的观点,但你也可以说 time
  • @Slava Rozhnev 的回答对我有用:D

标签: mysql sql database


【解决方案1】:

优选的解决方案是将表列转换为TIME数据类型,但如果不可能,您可以通过在查询中将字符串转换为时间来实现结果:

SELECT [column_name] 
FROM [table_name] 
WHERE
    date = "31-Jul-2018" 
    AND analytic_id = 1 
    AND TIME(time) BETWEEN TIME("8:00:00") AND TIME("10:00:00"); 

Here you can try it

【讨论】:

  • 哇,这绝对对我有帮助,因为我无法更改整个数据库,因为它几乎完成了。谢谢!
【解决方案2】:

您的 WHERE 子句无法正常工作,因为您的 time 字段是 string 类型。

字符串类型字段将在此处按字母顺序进行比较,这就是您的 WHERE 子句没有结果的原因。您正在询问那些按字母顺序排列在“8:00:00”之后和“10:00:00”之前但“10:00:00”在按字母顺序排列时已经出现在“8:00:00”之前的值,所以有介于两者之间。

几个选项供您选择:

【讨论】:

  • 几乎解释了 Slava 的回答。真的很有帮助,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2015-06-06
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多