我想查看更高的值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)
)
代码的第一位不返回任何内容,第二位返回整个表。 但我得到的只是“缺少右括号”
答案 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