我有一个mysql表,其日期时间存储为字符串。我想从表中获取时间范围的行。
我的表格如下:
datetime plugin_name
2017-11-12T00:44:48.530000 testng
2017-11-12T00:44:48.529000 testng
2017-11-12T00:46:22.668000 testng
2017-11-12T00:46:22.666000 testng
2017-11-12T01:00:16.338000 ntf-test
此处列datetime
的类型为String
。我已尝试使用此查询
select `datetime`, plugin_name
from plugin_names
where datetime(`datetime`) > '2017-06-29T06:16:49.426000'
and DATETIME(`datetime`) < '2017-06-29T06:16:49.314000'
但我收到的错误是:
Encountered: DATETIME
Expected: CASE, CAST, DEFAULT, EXISTS, FALSE, IF, INTERVAL, NOT, NULL, REPLACE, TRUNCATE, TRUE, IDENTIFIER
我尝试过这样做:MySQL compare DATE string with string from DATETIME field
我正在将Impala用于分布式Mysql数据库 任何人都知道如何解决这个问题?
答案 0 :(得分:0)
对于MySQL
您关注的示例是日期,而不是完整的时间戳。对于那些字符串,您需要str_to_date
,并且需要记住'%Y-%m-%dT%H:%i:%s.%f'
,因为每次针对该表运行查询时,您都需要它。一个更好的解决方案是使用REAL日期时间列。 sqlfiddle demo
select
`datetime`
, str_to_date(`datetime`,'%Y-%m-%dT%H:%i:%s.%f')
, plugin_name
from plugin_names
where str_to_date(`datetime`,'%Y-%m-%dT%H:%i:%s.%f') > '2017-10-29T06:16:49.426000'
and str_to_date(`datetime`,'%Y-%m-%dT%H:%i:%s.%f') < '2017-12-29T06:16:49.314000'
等到某些人进入该列的无效日期......例如
'2O17-02-30T00:44:48.53000'
并且它不是您认为的