주니봉
  • [Oracle] 숫자 체크 방법
    2021년 01월 13일 11시 52분 48초에 업로드 된 글입니다.
    작성자: 봉주니

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

     

    방법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

    결과)

     

    반응형
    댓글