Amazon Athena中DATE类型出生日期字段的处理与运算实现方法
Amazon Athena 出生日期字段处理SQL实现
以下实现完全适配Athena原生Trino(原Presto)语法,所有函数均为内置支持:
SELECT birth_date, -- 出生年份分组标记 CASE WHEN EXTRACT(YEAR FROM birth_date) < 2000 THEN 'pre-2000' ELSE 'post-2000' END AS birth_cohort, -- 计算当前日期距离出生日期的天数 DATE_DIFF('day', birth_date, CURRENT_DATE) AS days_from_birth, -- 自定义日期格式转换 DATE_FORMAT(birth_date, '%Yy %mm %dd') AS formatted_birth_date FROM -- 替换为你的实际表名 user_info -- 仅保留2000年及以后出生的记录 WHERE birth_date >= DATE '2000-01-01'
各需求实现说明
- 需求1(年份标记):通过
CASE WHEN条件判断,结合EXTRACT(YEAR FROM birth_date)提取出生年份匹配对应标签即可,也可以直接用日期比较替代年份提取获得更高性能。 - 需求2(结果筛选):直接在WHERE子句过滤日期
birth_date >= DATE '2000-01-01',比提取年份判断效率更高,若表按出生日期分区还可以命中分区裁剪。 - 需求3(天数计算):内置函数
DATE_DIFF指定时间单位为day,传入起始日期(出生日期)和结束日期(当前日期CURRENT_DATE)即可得到间隔整数天数。 - 需求4(自定义格式):
DATE_FORMAT的格式化串中,%Y对应4位年份、%m对应2位月份、%d对应2位日期,在占位符后直接拼接y/m/d字符即可得到1990y 11m 01d格式的结果。
若你的出生日期字段为字符串类型,需要先通过
DATE_PARSE(birth_date_str, '%Y-%m-%d')转为DATE类型再执行上述处理。
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

