适用于Oracle的ISNumeric替代品

时间:2019-05-28 10:45:00

标签: oracle

我想查看更高的值A或B。它们是字符串,但大多数字符串仅包含数字。我需要转换这些数字,以便可以使用>和<运算符。

他们不希望我在“他们的”数据库上创建函数。所以这不是一个选择。我在"Safe" TO_NUMBER()上尝试过卢卡斯·索佐达(Lukasz Szozda)的方法,但这给了我“缺少正确的括号”

我尝试了https://docs.oracle.com/cd/E51367_01/financialsop_gs/FADRA/ch09s05s53.html 也没有成功。

我尝试使用REGEX,但也没有运气。

SELECT *
FROM Table
WHERE 
(
 TO_NUMBER('T' DEFAULT 0 ON CONVERSION ERROR) 
 > 
 TO_NUMBER('5' DEFAULT 0 ON CONVERSION ERROR)
)

SELECT *
FROM Table
WHERE 
(
 TO_NUMBER('7' DEFAULT 0 ON CONVERSION ERROR) 
 > 
 TO_NUMBER('5' DEFAULT 0 ON CONVERSION ERROR)
)

代码的第一位不返回任何内容,第二位返回整个表。 但我得到的只是“缺少右括号”

1 个答案:

答案 0 :(得分:3)

正如Lukasz对您所链接的问题的回答所指出的那样,on conversion error语法为added in 12cR2,因此您无法在11gR2中使用它-这是导致您收到错误的原因。

该问题中描述的正则表达式方法有效:

SELECT *
FROM dual
WHERE 
(
 COALESCE(TO_NUMBER(REGEXP_SUBSTR('T', '^\d+')), 0) 
 > 
 COALESCE(TO_NUMBER(REGEXP_SUBSTR('5', '^\d+')), 0)
);

no rows selected

SELECT *
FROM dual
WHERE 
(
 COALESCE(TO_NUMBER(REGEXP_SUBSTR('7', '^\d+')), 0)
 > 
 COALESCE(TO_NUMBER(REGEXP_SUBSTR('5', '^\d+')), 0)
);

D
-
X