Hive SQL如何获取给定日期对应的月起始日期与月结束日期
Hive SQL 月首日/月末日计算异常修复方案
错误根因
- 格式符使用错误:Hive
date_format函数中,大写DD表示当年的第几天,小写dd才表示当月的第几天,这是你输出9~32序列数字的直接原因。 - 月末计算逻辑错误:原有通过
date_sub对DATA_DATE做减法的逻辑,无法正确推导当月最后一天。
正确计算代码
月起始日期计算
你现有逻辑可正常运行,也可使用更简洁的通用写法:
-- 通用写法,直接取当月1日 date_format(DATA_DATE, 'yyyy-MM-01') AS month_start_date
月结束日期计算
-- Hive 2.1及以上版本,直接调用内置last_day函数 date_format(last_day(DATA_DATE), 'yyyy-MM-dd') AS month_end_date -- 兼容低版本Hive的写法:次月1日减1天 date_format(date_sub(date_add(date_format(DATA_DATE, 'yyyy-MM-01'), 31), day(date_add(date_format(DATA_DATE, 'yyyy-MM-01'), 31))), 'yyyy-MM-dd') AS month_end_date
内容的提问来源于stack exchange,提问作者Anvesh
相关产品推荐
相关产品推荐

