[SQL] 값이 오라클에 숫자가 아닌 경우 어떻게 알 수 있습니까?
SQL값이 오라클에 숫자가 아닌 경우 어떻게 알 수 있습니까?
나는 나의 값이 유효하지 않은 경우 오류 메시지를 반환합니다 다음과 같은 코드가 있습니다. 주어진 값이 숫자가 아닌 경우 저도 같은 오류 메시지를주고 싶습니다.
IF(option_id = 0021) THEN
IF((value<10000) or (value>7200000) or /* Numeric Check */)THEN
ip_msg(6214,option_name); -- Error Message
return;
END IF;
END IF;
SQL Server에서 단순히 ISNUMERIC을 사용 (). 나는 오라클에서 비슷한 일을하고 싶습니다. 등과 같은
IF((!ISNUMERIC(value)) or (value<10000) or (value>7200000))
THEN ...
해결법
-
==============================
1.
REGEXP_LIKE(column, '^[[:digit:]]+$')
열이 숫자 만 보유하고있는 경우에 true를 돌려줍니다
-
==============================
2.오라클 DB의 12C 출시 2에서 당신은 VALIDATE_CONVERSION 기능을 사용할 수 있습니다 :
오라클 DB의 12C 출시 2에서 당신은 VALIDATE_CONVERSION 기능을 사용할 수 있습니다 :
IF (VALIDATE_CONVERSION(value AS NUMBER) = 1) THEN ... END IF;
DB <> 바이올린 데모
-
==============================
3.어떤이 내장되지-에있는 기능. 당신은 하나를 쓸 수
어떤이 내장되지-에있는 기능. 당신은 하나를 쓸 수
CREATE FUNCTION is_numeric( p_str IN VARCHAR2 ) RETURN NUMBER IS l_num NUMBER; BEGIN l_num := to_number( p_str ); RETURN 1; EXCEPTION WHEN value_error THEN RETURN 0; END;
및 / 또는
CREATE FUNCTION my_to_number( p_str IN VARCHAR2 ) RETURN NUMBER IS l_num NUMBER; BEGIN l_num := to_number( p_str ); RETURN l_num; EXCEPTION WHEN value_error THEN RETURN NULL; END;
당신은 할 수있다
IF( is_numeric( str ) = 1 AND my_to_number( str ) >= 1000 AND my_to_number( str ) <= 7000 )
당신은 오라클 12.2를 사용하는 일이 이상, 당신이 활용할 수 있다는 TO_NUMBER 함수에 대한 개선 사항이있는 경우
IF( to_number( str default null on conversion error ) >= 1000 AND to_number( str default null on conversion error ) <= 7000 )
-
==============================
4.당신은 정수를 일치 다음과 같은 정규 표현식을 사용할 수 있습니다 (예를 들어, 123) 지수와 부동 소수점 수 (12.3), 숫자 (1.2e3) :
당신은 정수를 일치 다음과 같은 정규 표현식을 사용할 수 있습니다 (예를 들어, 123) 지수와 부동 소수점 수 (12.3), 숫자 (1.2e3) :
^-?\d*\.?\d+([eE]-?\d+)?$
당신이 + 표시뿐만 아니라 동의 할 경우 - [+ -]에 위 - 징후 (오라클 TO_NUMBER와 마찬가지로 ()), 당신은 각각의 발생을 변경할 수 있습니다. 다음과 같이 위의 코드의 당신의 블록을 다시 작성할 수 있도록 :
IF (option_id = 0021) THEN IF NOT REGEXP_LIKE(value, '^[+-]?\d*\.?\d+([eE][+-]?\d+)?$') OR TO_NUMBER(value) < 10000 OR TO_NUMBER(value) > 7200000 THEN ip_msg(6214,option_name); RETURN; END IF; END IF;
난 당신이 예외 블록을 추가하거나 @JustinCave에서 알 수 있듯이 사용자 정의 TO_NUMBER () 함수를 작성 할 수 있도록 모든 값을 처리 할 것이라고 모두 특정 아닙니다.
-
==============================
5.내가 인터넷에서 찾을 수있는 가장 좋은 답 :
내가 인터넷에서 찾을 수있는 가장 좋은 답 :
SELECT case when trim(TRANSLATE(col1, '0123456789-,.', ' ')) is null then 'numeric' else 'alpha' end FROM tab1;
from https://stackoverflow.com/questions/28819709/how-can-you-tell-if-a-value-is-not-numeric-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL에서 주 번호를 추출하는 방법 (0) | 2020.05.03 |
---|---|
[SQL] MySQL의에서 INNODB을 가능하게하는 방법 (0) | 2020.05.03 |
[SQL] 카운트를 사용하여 발생 횟수를 찾을 수 (0) | 2020.05.03 |
[SQL] 어떤 순서로 쿼리 및 하위 쿼리는 SQL 엔진에 의해 실행됩니다? (0) | 2020.05.03 |
[SQL] 어떻게 SQL에서 연산자 PHP 배열을 사용 하는가? (0) | 2020.05.03 |