plsql - 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
?
解决方案
实际上,我很惊讶您当前的查询甚至运行没有错误,因为 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;
如果存在小数点,这将只保留出现在小数点之后的数字。否则,它只会返回没有小数部分的输入的所有数字。
推荐阅读
- angular - 防止 Angular 祖先依赖注入
- java - java.lang.RuntimeException:java.lang.RuntimeException:在模块jetified-bolts-tasks-1.24.1.jar中发现重复的类bolts.AggregateException
- terraform - Terraform Azure 流分析作业 - 开始/停止
- c - 无法使用线程删除c中的文件
- mysql - 有点棘手的 mySQL 查询
- kubernetes - GCP 上 K8s 上的标签值无效
- git - 为什么 git 跟踪我桌面上的所有新文件?
- node.js - Multer 和 Joi 兼容性
- sql-server - 为什么一个 Java 线程只能取回 SQLServer 中另一个线程插入的数据的一半?
- java - 格式化数学表达式