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
相关产品推荐
相关产品推荐

