Db2 for z/OS中TIMESTAMPDIFF秒级结果保留三位小数的SQL改写
解决方案
你可以直接将微秒单位的结果除以1000000.0(用浮点数除法避免整数截断),再通过ROUND函数保留三位小数。如果需要用逗号作为小数分隔符,可额外用REPLACE函数替换。
基础版(点分隔小数)
SELECT ROUND(AVG(TIMESTAMPDIFF(1, CHAR(TIMESTAMP(TIME_PROCESSED) - CHAR(TIMESTAMP(TIME_START))))) / 1000000.0, 3) AS Result FROM Table A
逗号分隔小数版
SELECT REPLACE(ROUND(AVG(TIMESTAMPDIFF(1, CHAR(TIMESTAMP(TIME_PROCESSED) - CHAR(TIMESTAMP(TIME_START))))) / 1000000.0, 3), '.', ',') AS Result FROM Table A
原因说明
你之前用TIMESTAMPDIFF(2)得到0,是因为这个参数返回的是整数秒数,当平均处理时间不足1秒时,整数截断后结果就是0。而通过微秒数除以1000000.0(注意带小数点的数值,确保触发浮点数运算),可以保留精确的小数部分,再用ROUND取三位小数就能得到你需要的格式。
内容的提问来源于stack exchange,提问作者HamsterBoomer
相关产品推荐
相关产品推荐

