问题描述
想要按照今天的日期过滤ELB日志。他尝试了以下查询:
SELECT request_timestamp
FROM elb_logs
WHERE date_trunc('day', request_timestamp) = date_trunc('day', current_timestamp)
LIMIT 10
但是查询失败并显示以下错误信息:
SYNTAX_ERROR: line 3:7: Unexpected parameters (varchar(3), varchar) for function date_trunc. Expected: date_trunc(varchar(x), date) , date_trunc(varchar(x), time) , date_trunc(varchar(x), time with time zone) , date_trunc(varchar(x), timestamp) , date_trunc(varchar(x), timestamp with time zone)
用户已经查看了日期和时间函数和运算符文档页面,但是没有发现任何错误。用户根据此页面在Amazon Athena中创建了elb_logs
表。用户想知道自己漏掉了什么。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
根据用户的问题描述和最佳回答,以下是解决方案的步骤:
1. 需要将request_timestamp
从ISO 8601格式的字符串转换为带有时区的时间戳,或者将current_timestamp
转换为字符串。
2. 一种方法是将request_timestamp
转换为格式为%Y-%m-%d
的字符串,例如:
–split_part(request_timestamp, 'T', 1)
–substr(request_timestamp, 1, 10)
然后将其与可以转换为ISO 8601格式的字符串的current_timestamp
进行比较。
3. 下面是最终的查询:
SELECT *
FROM elb_logs
WHERE split_part(request_timestamp, 'T', 1) = split_part(to_iso8601(current_timestamp), 'T', 1)
LIMIT 10
通过将request_timestamp
和current_timestamp
进行适当的转换,可以按照今天的日期过滤ELB日志。
希望对你有帮助!
正文完