在此查询中,time
字段使用parse_datetime
解析 2 次:
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'