如何编写Athena查询筛选指定日期区间及时段的数据
Athena查询:同时筛选日期区间与时段范围
要同时满足日期区间和时段范围的筛选,只需将两个条件用AND连接即可。核心是先把字符串类型的date_time解析为时间戳,再分别提取日期和小时进行过滤。
基础查询示例
SELECT * FROM your_table_name WHERE -- 筛选2022-01-01至2023-01-01的日期区间 CAST(date_parse(date_time, '%y-%m-%d %h:%i:%s') AS DATE) BETWEEN DATE '2022-01-01' AND DATE '2023-01-01' AND -- 筛选早6点至下午3点(小时数6到15)的时段 HOUR(date_parse(date_time, '%y-%m-%d %h:%i:%s')) BETWEEN 6 AND 15;
优化版(避免重复解析时间)
如果date_time字段解析成本较高,可以先用CTE提前转换一次:
WITH parsed_data AS ( SELECT *, date_parse(date_time, '%y-%m-%d %h:%i:%s') AS parsed_datetime FROM your_table_name ) SELECT * FROM parsed_data WHERE CAST(parsed_datetime AS DATE) BETWEEN DATE '2022-01-01' AND DATE '2023-01-01' AND HOUR(parsed_datetime) BETWEEN 6 AND 15;
注意事项
- 确认
date_parse的格式字符串和date_time的实际格式匹配:如果是24小时制时间,要把%h改成%H - 日期区间边界可按需调整:比如要排除2023-01-01当天的所有数据,可写成
CAST(parsed_datetime AS DATE) >= DATE '2022-01-01' AND CAST(parsed_datetime AS DATE) < DATE '2023-01-01' - 时段范围如果不需要包含结束点(比如到下午3点整之前),可写成
HOUR(parsed_datetime) >= 6 AND HOUR(parsed_datetime) < 15
内容的提问来源于stack exchange,提问作者Random guy
相关产品推荐
相关产品推荐

