在Where子句Mysql和Impala中转换为Datetime的字符串

时间:2017-11-12 02:14:09

标签: mysql datetime

我有一个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数据库 任何人都知道如何解决这个问题?

1 个答案:

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

并且它不是您认为的