我们有一个SQL查询,它有一个如下的条件。
结果值<> 0
result_value是Oracle EBS数据库中的varchar列。该查询在大多数情况下工作正常。但它随机抛出下面的错误。
[错误]执行(216:33):ORA-01722:数无效
将条件result_value <> TO_CHAR('0')更改为使其在出错时工作。
为什么系统会这样?下面是结果的屏幕截图。字母数字列是regexp_like(result_value,'^-?\d+(.\d+)?$(E(+|- )\d+)?$')then 'numeric' else 'alpha' end alphanumeric
1条答案
按热度按时间ct3nt3jp1#
在Oracle 12中,您可以使用
TO_NUMBER(result_value DEFAULT NULL ON CONVERSION ERROR)
,然后可以与数字进行比较,并且可能不需要正则表达式:其中,对于样本数据:
输出:
| 结果_值|
| --|
| 1 |
result_value <> '0'
只会排除样本数据中的一行,实际上有5行的数值与0
相同。*fiddle