You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按年月拆分日期区间生成记录?是否有Hive原生函数?

Hive没有专门直接实现该需求的单一函数,但可以通过组合内置函数+侧视图完成日期区间的年月拆分,以下是具体实现方案:

源数据

姓名start_dateend_date
John12-15-202201-05-2023
Rick02-08-202304-02-2023

期望输出

姓名monthyear
John122022
John012023
Rick022023
Rick032023
Rick042023

实现SQL

SELECT 
    t.姓名,
    date_format(month_seq, 'MM') AS month,
    date_format(month_seq, 'yyyy') AS year
FROM (
    SELECT 
        姓名,
        -- 生成从起始月第一天到结束月第一天的月度序列
        sequence(
            trunc(to_date(start_date, 'MM-dd-yyyy'), 'MM'),
            trunc(to_date(end_date, 'MM-dd-yyyy'), 'MM'),
            interval 1 month
        ) AS month_list
    FROM your_table_name
) t
LATERAL VIEW explode(t.month_list) exploded AS month_seq
ORDER BY 姓名, year, month;

代码说明

  • to_date(start_date, 'MM-dd-yyyy'):将源数据的字符串日期转换为Hive可识别的date类型,匹配MM-dd-yyyy格式。
  • trunc(..., 'MM'):将日期截断至当月第一天,确保序列从每个月的起始点生成。
  • sequence(start, end, interval):生成从起始日期到结束日期的日期序列,间隔设为1个月,得到区间内每个月的第一天。
  • LATERAL VIEW explode(...):将数组类型的月度序列展开为多行记录。
  • date_format(..., 'MM')/date_format(..., 'yyyy'):从展开的月度日期中提取两位月份和四位年份。

内容的提问来源于stack exchange,提问作者Tanvir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:03:14