【发布时间】:2014-04-09 15:33:49
【问题描述】:
我需要修改超过 5 位的数字。LENGTH 函数适用于字符串,但不适用于位数。应该如何计算数字中的位数?
【问题讨论】:
-
整数,或者您可能也必须处理小数 - 如果是这样,您将如何计算这些?
-
如果你说明为什么你需要长度会很有帮助。例如是否用于计算格式化显示或存储所需的字符数(例如在文本文件中)?
我需要修改超过 5 位的数字。LENGTH 函数适用于字符串,但不适用于位数。应该如何计算数字中的位数?
【问题讨论】:
select length(to_char(11111)) from dual
输出 5
【讨论】:
length 很好,使用隐式或显式 to_char() 将数字转换为字符串,然后可以计算其字符,如 OldProgrammer 所示。
如果你想把它当作一个数字,你也可以这样做:
trunc(1/log(n, 10)) + 1
...适用于大于 2 的整数。但是对于以后尝试维护您的代码的人来说,这将不太直观...
【讨论】:
CASE WHEN TRUNC(n) = 0 THEN 1 ELSE FLOOR(log(10, ABS(TRUNC(n)))) +1 END
什么时候不只是保持简单?
当 mynumber >= 100000 THEN 时的情况;
【讨论】: