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

NUMTODSINTERVAL()传入超90分钟数值报ORA-01481错误如何解决

ORA-01481错误根因

报错是由SQL中TO_CHAR(f.Duration, 'hh24:mi')、TO_CHAR(f2.Duration, 'hh24:mi')两行代码的错误用法导致的:

  • f.Duration字段为数值类型,存储的是影片时长对应的分钟数
  • hh24:mi是Oracle中日期/时间间隔类型专用的格式掩码,不能直接用于数值类型转换
  • 当时长超过99分钟(数值变为3位数)时,格式匹配失败抛出ORA-01481错误

修复方案

有两种常用修正方式,二选一即可:

方案1:将数值转为时间间隔后格式化

把分钟数先转为时间间隔类型,再用hh24:mi掩码格式化,修改对应两行代码即可:

-- 原错误写法
TO_CHAR(f.Duration, 'hh24:mi')
-- 修改为
TO_CHAR(NUMTODSINTERVAL(f.Duration, 'MINUTE'), 'hh24:mi')

-- 同理f2的时长字段也做同样修改
TO_CHAR(f2.Duration, 'hh24:mi')
-- 修改为
TO_CHAR(NUMTODSINTERVAL(f2.Duration, 'MINUTE'), 'hh24:mi')

方案2:手动计算拼接时长格式

兼容性更强,无需依赖时间间隔类型转换,直接通过数值计算拼接出小时:分钟格式:

-- 替换f.Duration的转换代码
TRUNC(f.Duration/60)||':'||LPAD(MOD(f.Duration,60),2,'0')
-- 替换f2.Duration的转换代码
TRUNC(f2.Duration/60)||':'||LPAD(MOD(f2.Duration,60),2,'0')

修正后完整SQL(采用方案1示例)

SELECT f.Name,
       TO_CHAR(s.Film_Start_Time, 'hh24:mi'),
       TO_CHAR(NUMTODSINTERVAL(f.Duration, 'MINUTE'), 'hh24:mi'),
       f2.Name,
       TO_CHAR(s2.Film_Start_Time, 'hh24:mi'),
       TO_CHAR(NUMTODSINTERVAL(f2.Duration, 'MINUTE'), 'hh24:mi')
FROM   Schedule s
       JOIN Films f ON s.Film_Name = f.Name
       JOIN Schedule s2 ON s2.Film_Start_Time > s.Film_Start_Time
                       AND s2.Film_Start_Time < s.Film_Start_Time + NUMTODSINTERVAL(f.Duration, 'MINUTE')
       JOIN Films f2 ON s2.Film_Name = f2.Name
ORDER BY s.Film_Start_Time ASC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:57:02