문제 설명
Oracle을 위한 IS숫자 대안 (ISNumeric Alternatives for Oracle)
어떤 값이 A 또는 B보다 더 높은지 알고 싶습니다. 그들은 문자열이지만 대부분의 문자열에는 숫자만 포함됩니다. > 및 <운영자.
그들은 내가 "그들의" 데이터베이스에 함수를 만드는 것을 원하지 않습니다. 그래서 그것은 옵션이 아닙니다. Lukasz Szozda의 "Safe" TO_NUMBER() 하지만 "오른쪽 괄호 누락"이 표시됩니다.
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:
As noted in Lukasz's answer on the question you linked to, the on conversion error
syntax was added in 12cR2, so you cannot use it in 11gR2 ‑ that is the cause of the error you are getting.
The regular expression method described in that question works though:
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
(by user10086705、Alex Poole)