Oracle에서 값이 숫자가 아닌지 어떻게 알 수 있습니까?
값이 유효하지 않은 경우 오류 메시지를 반환하는 코드는 다음과 같습니다.주어진 값이 숫자가 아닐 경우 동일한 오류 메시지를 보내고 싶습니다.
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 ...
REGEXP_LIKE(column, '^[[:digit:]]+$')
열에 숫자 문자만 포함된 경우 TRUE를 반환합니다.
부터Oracle DB 12c Release 2VALIDATE_CONVERVION 함수를 사용할 수 있습니다.
VALIDE_CONVERVISION은 expr을 지정된 데이터 유형으로 변환할 수 있는지 여부를 결정합니다.expr을 정상적으로 변환할 수 있으면 이 함수는 1을 반환합니다.그렇지 않으면 이 함수는 0을 반환합니다.expr이 null로 평가되면 이 함수는 1을 반환합니다.expr 평가 중 오류가 발생하면 이 함수는 오류를 반환합니다.
IF (VALIDATE_CONVERSION(value AS NUMBER) = 1) THEN
...
END IF;
내장된 기능은 없습니다.쓸 수 있다
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 )
Oracle 12.2 이후를 사용하고 있는 경우,to_number활용할 수 있는 기능
IF( to_number( str default null on conversion error ) >= 1000 AND
to_number( str default null on conversion error ) <= 7000 )
인터넷에서 찾은 최고의 답변:
SELECT case when trim(TRANSLATE(col1, '0123456789-,.', ' ')) is null
then 'numeric'
else 'alpha'
end
FROM tab1;
정수와 일치하는 다음 정규식을 사용할 수 있습니다(예:123부동소수점수( )12.3및 지수( )가 있는 숫자입니다.1.2e3):
^-?\d*\.?\d+([eE]-?\d+)?$
승낙을 원하신다면+징후와 더불어-(Oracle의 경우와 마찬가지로)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;
모든 값을 처리할 수 있을지는 잘 모르기 때문에 추가하기를 원할 수 있습니다.EXCEPTION관습을 막거나 쓰다to_number()@JustinCave가 제안하는 대로 기능합니다.
이 정규 표현은 5, -5, +5, 5.44, 3.45e-3 등의 숫자와 일치합니다.
REGEXP_LIKE('54.55e33', '^[+-]?\d+([.]\d+)?(e[+-]?\d+)?$')
CREATE OR REPLACE FUNCTION IS_NUMERIC(P_INPUT IN VARCHAR2) RETURN INTEGER IS
RESULT INTEGER;
NUM NUMBER ;
BEGIN
NUM:=TO_NUMBER(P_INPUT);
RETURN 1;
EXCEPTION WHEN OTHERS THEN
RETURN 0;
END IS_NUMERIC;
/
SELECT DECODE(REGEXP_COUNT(:value,'\d'),LENGTH(:value),'Y','N') AS is_numeric FROM dual;
여러 가지 방법이 있지만, 이것은 나에게 딱 맞습니다.
언급URL : https://stackoverflow.com/questions/28819709/how-can-you-tell-if-a-value-is-not-numeric-in-oracle
'programing' 카테고리의 다른 글
| window.location에 http 헤더를 추가하고 있습니다.Angular 앱의 href (0) | 2023.03.23 |
|---|---|
| ng-click이 동적으로 생성된 HTML에서 작동하지 않음 (0) | 2023.03.23 |
| E: 패키지 mongodb-org를 찾을 수 없습니다. (0) | 2023.03.23 |
| angularjs $log - 행 번호 표시 (0) | 2023.03.23 |
| 각도 재료 설계 - 화면 크기에 따라 플렉스 값 변경 (0) | 2023.03.23 |