在此查询中,time
字段被parse_datetime
解析两次:
SELECT
date_trunc('HOUR', parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z')),
*
FROM
logs
WHERE
parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') BETWEEN timestamp '2020-05-14 19:00' AND timestamp '2020-05-14 23:59'
我尝试了这个,但是没有用:
SELECT
parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') as parsed_time,
date_trunc('HOUR', parsed_time),
*
FROM
logs
WHERE
parsed_time BETWEEN timestamp '2020-05-14 19:00' AND timestamp '2020-05-14 23:59'
仅可以解析一次time
?
根据SQL规范,WHERE
子句不能引用SELECT
子句中的投影,它只能引用FROM
提供的列。
WHERE
子句中完全重复该表达式:WHERE parse_datetime(...) BETWEEN ...
SELECT *
FROM (
SELECT parse_datetime(....) as parsed_time, ...
FROM ...
)
WHERE parsed_time BETWEEN ...
我无法发表评论,我写这是答案,因为我的分数还不够。您可以像这样更改它并尝试吗?;
SELECT
parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') as parsed_time,
logs.*
FROM
logs
HAVING parsed_time BETWEEN timestamp '2020-05-14 19:00' AND timestamp '2020-05-14 23:59'