SELECT TO_NUMBER('*') FROM DUAL

这显然给了我一个例外:

ORA-01722: 无效数字

有没有办法"跳过"它并获得0或者NULL反而?

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

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

UPD

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

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

答案

我找不到比这更好的东西了:

function safe_to_number(p varchar2) return number is
    v number;
  begin
    v := to_number(p);
    return v;
  exception when others then return 0;
end;

来自: stackoverflow.com