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

DB2计算timestamp(10)日期间毫秒数遇SQL错误-183求助

解决DB2中计算两个TIMESTAMP(10)毫秒差的-183错误

错误原因

你使用的endtime - starttime会生成INTERVAL类型,当两个时间的间隔超出DB2支持的INTERVAL范围(比如超过9999天或9999年),就会触发SQLCODE=-183的溢出错误;同时基于大INTERVAL的CHAR转换也会加剧这个问题。

解决方案

使用提取时间戳的Epoch秒数和微秒数的方式计算毫秒差,完全避免INTERVAL溢出:

SELECT
  (
    EXTRACT(EPOCH FROM endtime) * 1000 + 
    MOD(EXTRACT(MICROSECOND FROM endtime), 1000000) / 1000
  ) - (
    EXTRACT(EPOCH FROM starttime) * 1000 + 
    MOD(EXTRACT(MICROSECOND FROM starttime), 1000000) / 1000
  ) AS ms
FROM TABLE

说明

  • EXTRACT(EPOCH FROM timestamp) 获取自1970-01-01 00:00:00以来的秒数,乘以1000转为毫秒
  • MOD(EXTRACT(MICROSECOND FROM timestamp), 1000000) 提取时间戳的微秒部分(TIMESTAMP(10)精度到10位小数秒,前6位为微秒),除以1000转为毫秒的小数部分
  • 两个时间戳的毫秒数直接相减,不受时间间隔大小限制,不会触发溢出错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:15:32