Hive date_format函数2021年12月25日后年份跳变问题咨询
Hive date_format年份跳变问题原因及解决方案
该现象不属于本地实例异常,是日期格式符规则导致的共性问题,所有遵循Java日期格式化逻辑的SQL引擎(Hive、Spark SQL等)都存在该规则。
- 核心原因:你使用了大写的
YYYY作为年份格式符,它代表的是周年(Week-based Year),遵循ISO 8601标准,定义为当前日期所在周对应的年份:只要某一周的天数有≥4天属于下一年,整周的日期用YYYY格式化都会显示下一年的年份。2021年12月26日所在的周有4天以上属于2022年,因此格式化后年份跳变为2022。 - 正确用法:如果要获取常规的日历年,使用小写的
yyyy作为年份格式符即可。
修正后的测试SQL如下:
Select date_format('2021-12-25','yyyy-MM-dd') as Correct2021 ,date_format('2021-12-26','yyyy-MM-dd') as Correct2021_2 ,date_format(date_add(current_date,51),'yyyy-MM-dd') as Correct2021b ,date_format(date_add(current_date,52),'yyyy-MM-dd') as Correct2021b_2
修正后返回结果符合预期:
| correct2021 | correct2021_2 | correct2021b | correct2021b_2 |
|---|---|---|---|
| 2021-12-25 | 2021-12-26 | 2021-12-25 | 2021-12-26 |
补充注意:仅在按周统计的业务场景(如周度报表、周环比计算)下才需要使用YYYY格式符,其他日常日期格式化场景统一使用yyyy即可避免该类问题。
内容的提问来源于stack exchange,提问作者Urza5589
相关产品推荐
相关产品推荐

