【发布时间】:2015-10-08 19:24:26
【问题描述】:
我在 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;
【问题讨论】:
-
看看
month(20141008)和year(20141008) -
@vkp
MONTH()和YEAR()函数适用于存储为日期或时间戳的 Impala 数据,但它似乎不适用于字符串数据。 -
@vkp 这些函数似乎不适用于存储为 YYYYMMDD 字符串的日期。
-
使用演员表(datadate as char (8))