Amazon Athena中字符串转日期:mmm-dd-yyyy转yyyy-mm-dd方法
在Amazon Athena中将mmm-dd-yyyy格式字符串转换为yyyy-mm-dd日期的解决方案
我之前在处理Athena的日志数据时正好遇到过这个需求,用Presto的日期函数就能轻松搞定,给你两种实用的方案,按需选择就行:
方法1:转换为DATE类型(推荐)
如果后续需要对这个日期做筛选、计算(比如求日期差、按月份聚合),强烈推荐把字符串转换成DATE类型——Athena里的DATE类型默认显示格式就是yyyy-mm-dd,而且能直接支持所有日期相关的SQL操作。
使用date_parse()函数解析字符串,语法如下:
SELECT date_parse('Nov-06-2015', '%b-%d-%Y') AS converted_date;
参数说明:
%b:匹配英文月份缩写(比如Nov、Jan),Presto对大小写不敏感,所以nov也能正常解析%d:匹配两位数字的日期(比如06、23)%Y:匹配四位数字的年份(比如2015)
执行这条语句后,返回的结果就是2015-11-06,类型为DATE。
方法2:转换为yyyy-mm-dd格式的字符串
如果只是需要得到字符串形式的yyyy-mm-dd,不需要DATE类型,可以结合date_parse()和date_format()来实现:
SELECT date_format(date_parse('Nov-06-2015', '%b-%d-%Y'), '%Y-%m-%d') AS converted_date_str;
这条语句先把字符串解析成日期,再格式化为你需要的字符串格式,返回结果是2015-11-06,类型为VARCHAR。
额外注意事项
- 如果你的数据集里存在格式错误的字符串(比如
Nov-32-2015)或者NULL值,date_parse()会返回NULL。你可以用coalesce()函数设置默认值,避免影响后续查询:SELECT coalesce(date_parse(date_column, '%b-%d-%Y'), DATE '1900-01-01') AS converted_date FROM your_target_table; - 确保你的月份缩写是标准的英文缩写(比如
Feb而非Febr),否则解析会失败。
内容的提问来源于stack exchange,提问作者Data_101
相关产品推荐
相关产品推荐

