我有一个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 将日期字符串与日期时间字段中的字符串进行比较
我正在使用 Impala 用于分布式 Mysql 数据库有人知道如何解决这个问题吗?
对于 MySQL
您下面的示例是针对日期的,而不是完整的时间戳。对于这些字符串,您将需要str_to_date
并且您需要记住'%Y-%m-%dT%H:%i:%s.%f'
因为每次针对该表运行查询时都需要它。更好的解决方案是使用实时日期时间列。 SQLfiddle 演示
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'
这不是你认为的那样