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

Oracle SQL中如何按预约时长将单条时间区间记录拆分为多行

实现方案

核心思路

  • 利用Oracle层级查询CONNECT BY生成对应拆分条数的序列,序列长度由总时长Duration除以单条预约时长Duration_Appointment得到
  • 每条拆分记录的起始时间为原始起始时间叠加「序列序号-1」倍的单条预约时长,结束时间为当前起始时间叠加单条预约时长
  • 其他固定字段(id、总时长、单条预约时长)直接复用原始数据即可

完整SQL示例

WITH original_data AS (
    -- 此处可替换为你的实际业务表,以下为模拟测试数据
    SELECT 
        193229 AS id,
        TO_DATE('07/09/2021 13:30:00', 'DD/MM/YYYY HH24:MI:SS') AS datetimeFrom,
        TO_DATE('07/09/2021 17:00:00', 'DD/MM/YYYY HH24:MI:SS') AS datetimeTo,
        210 AS Duration,
        15 AS Duration_Appointment
    FROM DUAL
)
SELECT
    t.id,
    -- 如需输出字符串格式日期,可外层包TO_CHAR:TO_CHAR(日期运算, 'DD/MM/YYYY HH24:MI:SS')
    t.datetimeFrom + (LEVEL - 1) * t.Duration_Appointment / 1440 AS datetimeFrom,
    t.datetimeFrom + LEVEL * t.Duration_Appointment / 1440 AS datetimeTo,
    t.Duration || '(min)' AS Duration,
    t.Duration_Appointment || '(min)' AS Duration_Appointment
FROM original_data t
CONNECT BY LEVEL <= t.Duration / t.Duration_Appointment
    -- 多id场景下需加以下两个条件避免数据交叉、循环报错
    AND PRIOR t.id = t.id
    AND PRIOR SYS_GUID() IS NOT NULL
ORDER BY id, datetimeFrom;

补充说明

Oracle中日期运算默认单位为天,15分钟换算为天的计算逻辑为15/1440(1天=1440分钟)
若你的原始datetimeFrom、datetimeTo字段为字符串类型,需要先通过TO_DATE转换为日期类型再做运算,输出时可按需用TO_CHAR转回指定格式的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:30:00