首页 > 解决方案 > PLSQL SUBSTR 函数忽略尾随零

问题描述

select TO_NUMBER (SUBSTR(10.31, INSTR (10.31, '.') + 1)) from dual

上面的查询31作为输出返回。但下面的查询3作为输出返回。

select TO_NUMBER (SUBSTR(10.30, INSTR (10.30, '.') + 1)) from dual

我怎样才能得到30输出而不是输出3

标签: plsqlsubstr

解决方案


实际上,我很惊讶您当前的查询甚至运行没有错误,因为 Oracle 的SUBSTR函数应该对字符串而不是数字进行操作。话虽这么说,如果您正确使用带有字符串的当前查询,那么它可以工作:

SELECT TO_NUMBER(SUBSTR('10.30', INSTR ('10.30', '.') + 1)) FROM dual;  -- returns 30

一种更紧凑(尽管不一定性能更高)的方法可能是使用REGEXP_SUBSTR

SELECT REGEXP_SUBSTR('10.30', '[0-9]+$') FROM dual;

如果存在小数点,这将只保留出现在小数点之后的数字。否则,它只会返回没有小数部分的输入的所有数字。


推荐阅读