Oracle

[Oracle] 숫자 체크 방법

봉주니 2021. 1. 13. 11:52

오라클에서 숫자인지 확인하는 방법은 아래와 같이 간단합니다.

 

방법1. REGEXP_INSTR (정규식 문자열 검색 함수, Oracle 10g 이상 사용가능)

   - REGEXP_INSTR([숫자값],'[^0-9]') = 0

   - 숫자가 아닌 값의 위치를 반환. 반환 값이 없으면 모든 문자가 숫자임

방법2. TRANSLATE (문자열 치환 함수, Oracle 8i 이상 사용가능)

   - TRANSLATE([숫자값],'A1234567890','A') IS NULL

   - 숫자를 찾아 치환 후 남은 문자가 존재 시 숫자가 아님

 

예제)

WITH TEST_TB AS (
    SELECT 'A' CODE, '1000' PRICE FROM DUAL UNION ALL
    SELECT 'B' CODE, '2000' PRICE FROM DUAL UNION ALL
    SELECT 'C' CODE, '1000A' PRICE FROM DUAL
)
SELECT *
  FROM TEST_TB;

결과)

 

 

방법1. REGEXP_INSTR

 - REGEXP_INSTR(PRICE,'[^0-9]') 정수만 체크

 - REGEXP_INSTR(PRICE,'^[+-]?\d*(\.?\d*)$') 부호(+,-) , 소수점까지 체크

WITH TEST_TB AS (
    SELECT 'A' CODE, '1000' PRICE FROM DUAL UNION ALL
    SELECT 'B' CODE, '2000' PRICE FROM DUAL UNION ALL
    SELECT 'C' CODE, '1000A' PRICE FROM DUAL
)
SELECT *
  FROM TEST_TB
 WHERE REGEXP_INSTR(PRICE,'[^0-9]') = 0

결과)

 

 

방법2. TRANSLATE

WITH TEST_TB AS (
    SELECT 'A' CODE, '1000' PRICE FROM DUAL UNION ALL
    SELECT 'B' CODE, '2000' PRICE FROM DUAL UNION ALL
    SELECT 'C' CODE, '1000A' PRICE FROM DUAL
)
SELECT *
  FROM TEST_TB
 WHERE TRANSLATE(PRICE,'A1234567890','A') IS NULL

결과)

 

반응형