oracle - "Safe"TO_NUMBER()

标签 oracle type-conversion ora-01722

SELECT TO_NUMBER('*') FROM DUAL

这显然给了我一个异常(exception):

ORA-01722: invalid number

有没有办法“跳过”它并获取 0NULL

整个问题:我有 NVARCHAR2 字段,其中包含数字,但几乎不包含;-)(如 *),我需要从列中选择最大的数字.

是的,我知道这是一个糟糕的设计,但这就是我现在需要的......:-S

UPD:

对于我自己来说,我已经解决了这个问题

COALESCE(TO_NUMBER(REGEXP_SUBSTR(field, '^\d+')), 0)

最佳答案

Oracle Database 12c Release 2开始,您可以使用 TO_NUMBER DEFAULT ... ON CONVERSION ERROR:

SELECT TO_NUMBER('*' DEFAULT 0 ON CONVERSION ERROR) AS "Value"
FROM DUAL;

CAST:

SELECT CAST('*' AS NUMBER DEFAULT 0 ON CONVERSION ERROR) AS "Value"
FROM DUAL;

<强> db<>fiddle demo

关于oracle - "Safe"TO_NUMBER(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4486949/

相关文章:

python-2.7 - 从十六进制值转换为二进制值

c# - 为什么我会收到 ORA-01722(无效数字)?

sql - 如何使用正则表达式获取不带扩展名的文件名

oracle - 不能使用 DBMS_RANDOM 函数

python - 将列表的列表转换为字典的字典

java - oracle jdbc 驱动版本疯狂

sql - plsql错误无效号码

java - Oracle JPA GenerationType.AUTO 与生成器要求 "hibernate_sequence"

oracle - 如何在oracle存储过程中printf(用于调试)?

sql - 在 SQL 查询中将 int 或 null 转换为 boolean 值的最佳方法是什么?