Oracle SQL - 根据条件将小数点四舍五入为 2/3

Oracle SQL - Round decimal to 2/3 based on conditon

您好,我有一个要求,我需要根据条件对小数进行四舍五入:

如果小数点后的第一个2位不是00那么我需要把它四舍五入到2位,否则3位。

示例: 1.232133342 => ROUND(1.232133342,2) //这会起作用

但是如果数字是 1.00233231213 值应该是 1.002 //四舍五入到 3 位数

如果数字是 1.0000223123312 那么值应该是 1.00002

有什么功能吗?有帮助吗?

从数字中减去数字的下限,并检查它是否小于.01

CASE WHEN ABS(number) - FLOOR(ABS(number)) < .01 THEN ROUND(number, 3)
     ELSE ROUND(number, 2)
END

通过使用 RegEx

计算小数部分中前导零的数量,四舍五入到至少两位数,可能更多
round(x, greatest(2, length(regexp_substr(x,'\.0*'))))

db-fiddle