我在impala中使用sql来编写这个查询。我正在尝试将以yyyymmdd格式存储的日期字符串转换为日期格式,以便运行如下查询:
SELECT datadate,
session_info
FROM database
WHERE datadate >= NOW() - INTERVAL 5 DAY
ORDER BY datadate DESC;
自从 >= NOW() - INTERVAL 5 DAY
代码无法处理yyyymmdd字符串,我想找到一种方法将其转换为适用于这种查询类型的日期格式。我的想法是,它应该看起来像这样(基于对其他sql查询编辑器的类似问题),但在impala中不起作用:
SELECT datadate,
session_info,
convert(datetime, '20141008', 102) AS session_date
FROM database
WHERE session_date >= NOW() - INTERVAL 5 DAY
ORDER BY session_date DESC;
有人知道在 Impala 怎么做吗?
编辑:
我终于找到了解决这个问题的有效办法。没有尝试使用的配置 CAST
或者 CONVERT
将在impala中工作,但下面的查询解决了问题,并且是完全可操作的,允许对包含字符串值的列执行日期数学:
SELECT datadate,
session_info
FROM database
WHERE datadate >= from_unixtime(unix_timestamp(now() - interval 5 days), 'yyyyMMdd')
GROUP BY datadate
ORDER BY datadate DESC;
3条答案
按热度按时间u2nhd7ah1#
本地方式:
vdgimpew2#
要忽略小时/分钟/秒,使用
from_timestamp
,结果2020-01-01
.从_timestamp(cast('2020-01-01 01:01:01.000000'作为时间戳),'yyyy-mm-dd')中选择;
o4tp2gmn3#
参见[链接更新2020-08-24]上的时间戳文字:
https://docs.cloudera.com/cdp-private-cloud-base/7.1.3/impala-sql-reference/topics/impala-literals.html
您需要将破折号添加到字符串中,以便impala能够将其转换为日期/时间戳。你可以这样做:
你可以用它来代替
datadate
在你的表情里。