Sql 在Impala中将YYYYMMDD字符串转换为日期

Sql 在Impala中将YYYYMMDD字符串转换为日期,sql,hadoop,impala,Sql,Hadoop,Impala,我正在使用Impala中的SQL编写此查询。我正在尝试将以YYYYMMDD格式存储的日期字符串转换为日期格式,以便运行如下查询: SELECT datadate, session_info FROM database WHERE datadate >= NOW() - INTERVAL 5 DAY ORDER BY datadate DESC; 由于>=NOW()-INTERVAL 5 DAY代码不适用于YYYYMMDD字符串,因此我想找到一种方法将其转换为适用于此类查询

我正在使用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;
有人知道在黑斑羚怎么做吗

编辑:

我终于找到了解决这个问题的有效办法。使用
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;
请参见[链接更新2020-08-24]上的时间戳文本:

您需要将破折号添加到字符串中,以便Impala能够将其转换为日期/时间戳。您可以通过以下方式实现:

concat_ws('-', substr(datadate,1,4), substr(datadate,5,2), substr(datadate,7) )
您可以在表达式中使用它来代替数据日期。

本机方式:

to_timestamp(cast(date_number AS STRING), 'yyyyMMdd')

要忽略小时/分钟/秒,使用时间戳中的
,结果
2020-01-01


从_时间戳(cast('2020-01-01 01:01:01.000000'作为时间戳),'yyyy-MM-dd')中选择

查看
month(20141008)
year(20141008)
@vkp
month()
year()
函数在存储为日期或时间戳的黑斑羚数据中工作,但它似乎不适用于字符串数据。请看文档@vkp这些函数似乎不适用于存储为YYYYMMDD字符串的日期。请使用cast(datadateaschar(8))完美!非常感谢。