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

如何遍历含两日期列的表并生成日期范围内所有连续日期

解决方案

以下为不同工具场景下的实现方法:

1. SQL 实现(适配 Hive/Spark SQL/PostgreSQL/MySQL 8.0+ 等支持递归 CTE 的数据库)

核心逻辑是先生成覆盖所有待拆分区间的连续日期序列,再和原表做范围关联:

-- 原表名为 date_range_table
WITH RECURSIVE date_series AS (
    SELECT MIN(`from`) AS dt FROM date_range_table
    UNION ALL
    SELECT DATE_ADD(dt, INTERVAL 1 DAY) 
    FROM date_series 
    WHERE dt < (SELECT MAX(`to`) FROM date_range_table)
)
SELECT 
    t.id,
    ds.dt AS `date`
FROM date_range_table t
INNER JOIN date_series ds 
ON ds.dt BETWEEN t.`from` AND t.`to`
ORDER BY t.id, ds.dt;

如果使用不支持递归 CTE 的低版本数据库,可以提前维护一张日历维度表替换上述的date_series,关联逻辑不变。

2. Python Pandas 实现

import pandas as pd

# 示例读取原表到df,实际使用时替换为你自己的读表逻辑
df = pd.DataFrame({
    'id': [1, 1],
    'from': pd.to_datetime(['01/01/2021', '06/01/2021'], dayfirst=True),
    'to': pd.to_datetime(['03/01/2021', '07/01/2021'], dayfirst=True)
})

# 拆分日期区间并展开为行
df['date'] = df.apply(lambda x: pd.date_range(start=x['from'], end=x['to']), axis=1)
result_df = df.explode('date')[['id', 'date']]

# 如需要输出为原格式的字符串,加以下代码
result_df['date'] = result_df['date'].dt.strftime('%d/%m/%Y')

3. Excel 实现(用Power Query)

  • 选中你的数据表,点击「数据」选项卡 → 「从表格/区域」导入Power Query编辑器
  • 选中from和to两列,点击「添加列」→ 「自定义列」,输入公式:
    = List.Dates([from], Duration.Days([to] - [from]) + 1, #duration(1, 0, 0, 0))
  • 点击新生成的自定义列右上角的展开按钮,选择「扩展到新行」
  • 删除不需要的from、to列,调整格式后导出即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:06:05