메뉴 건너뛰기

조회 수 8626 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

오라클(Oracle)에서는 ISNUMERIC(숫자확인) 함수가 없다. 직접 사용자함수를 만들어서 사용하거나 제공하는 다른 함수를 사용하여 값이 숫자인지 확인을 할 수 있다.

다음 세 가지 방법을 이용하여 숫자여부를 확인할 수 있다.


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

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

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

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

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

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

방법3. 사용자 정의 함수 생성 (IS_NUMBER)

   - IS_NUMBER([숫자값]) = 1

   - 숫자면 1, 문자면 0을 반환함


숫자값이 입력되는 문자(VARCHAR) 컬럼의 값을 연산을 해야하는 경우 숫자가 아닌 문자가 포함되어 있으면 오류가 발생한다.




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


WITH TEST_TABLE AS (

   SELECT 'SHIN RAMYUN' PRODUCT, '650' PRICE FROM DUAL UNION ALL

   SELECT 'NEOGURI' PRODUCT, '700' PRICE FROM DUAL UNION ALL

   SELECT 'JIN RAMEN' PRODUCT, '460' PRICE FROM DUAL

)

--정수만 체크가능 

SELECT PRODUCT

         , TO_NUMBER(PRICE) PRICE

  FROM TEST_TABLE

 WHERE REGEXP_INSTR(PRICE,'[^0-9]') = 0

;

--부호(+,-), 소수점까지 체크가능

SELECT PRODUCT

        , TO_NUMBER(PRICE) PRICE

 FROM TEST_TABLE

WHERE REGEXP_INSTR(PRICE,'^[+-]?\d*(\.?\d*)$') = 1




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


WITH TEST_TABLE AS (

   SELECT 'SHIN RAMYUN' PRODUCT, '650' PRICE FROM DUAL UNION ALL

   SELECT 'NEOGURI' PRODUCT, '700' PRICE FROM DUAL UNION ALL

   SELECT 'JIN RAMEN' PRODUCT, '460' PRICE FROM DUAL

)

 

SELECT PRODUCT

           , TO_NUMBER(PRICE) PRICE

   FROM TEST_TABLE

 WHERE TRANSLATE(PRICE,'A1234567890','A') IS NULL




방법3. 사용자 정의 함수 생성 (IS_NUMBER)


--사용자 정의 함수 생성

CREATE OR REPLACE FUNCTION IS_NUMBER(str VARCHAR2) RETURN NUMBER

IS

   v_ret NUMBER;

BEGIN

   IF str IS NULL OR LENGTH(TRIM(str)) = 0 THEN

      RETURN 0;

   END IF;

   v_ret := TO_NUMBER(str);

   RETURN 1;


   EXCEPTION WHEN OTHERS THEN

      RETURN 0;

END ;


WITH TEST_TABLE AS (

   SELECT 'SHIN RAMYUN' PRODUCT, '650' PRICE FROM DUAL UNION ALL

   SELECT 'NEOGURI' PRODUCT, '700' PRICE FROM DUAL UNION ALL

   SELECT 'JIN RAMEN' PRODUCT, '460' PRICE FROM DUAL

)

 

SELECT PRODUCT

           , TO_NUMBER(PRICE) PRICE

   FROM TEST_TABLE

 WHERE IS_NUMBER(PRICE) = 1




  1. IMP-00010: 엑스포트 파일이 유효하지 않고, 헤더가 검증에 실패했습니다

  2. 계층형 쿼리의 응용 - 답변형 계시판

  3. No Image 08Dec
    by
    2016/12/08 Views 8744 

    엑셀데이타를 DB 에 저장. Excel => oracle db restore

  4. No Image 08Dec
    by
    2016/12/08 Views 8648 

    오라클 암호 초기화 및 사용자 생성

  5. 오라클] 숫자 체크 방법 (IS_NUMBER, IS_NUMERIC)

  6. No Image 30Aug
    by
    2016/08/30 Views 8624 

    rownum 으로 범위지정을 해주고 싶을 때

  7. No Image 08Dec
    by
    2016/12/08 Views 8583 

    RMAN 을 이용한 오라클 백업

  8. No Image 08Dec
    by
    2016/12/08 Views 8581 

    [Oracle] 테이블 스페이스 및 사용자 계정 생성 방법

  9. [Oracle 12] ORA-01950: 테이블스페이스 'USERS'에 대한 권한이 없습니다.

  10. 계층형 쿼리의 응용 - 달력만들기

  11. No Image 11Sep
    by
    2016/09/11 Views 8526 

    oracle 구동 방법 및 재부팅 시 oracle 자동 시작 설정 ( /etc/rc.local )

  12. No Image 08Dec
    by
    2016/12/08 Views 8444 

    오라클 계정 lock 해제

  13. No Image 08Dec
    by
    2016/12/08 Views 8417 

    오라클 해당 월 의 맨첫날 ~ 마지막 일 가져 오는 쿼리

  14. No Image 29Aug
    by
    2016/08/29 Views 8379 

    WITH문으로 쿼리를 임시테이블이나 View처럼 사용하자.

  15. 관리자( SYSTEM, SYS) 계정 비밀번호를 잊어버렸을때..

  16. No Image 30Aug
    by
    2016/08/30 Views 8336 

    Oracle 에서 NVL, NVL2 함수 사용하는 예제

  17. No Image 20Jan
    by
    2017/01/20 Views 8329 

    오늘을 기준으로 해당주(week)의 모든 일자조회

  18. No Image 20Jan
    by
    2017/01/20 Views 8241 

    오라클 ORDER BY : 정렬

  19. No Image 12Sep
    by
    2016/09/12 Views 8230 

    TOAD에서 Explain Plan 보기

  20. Oracle 시퀀스 생성, 추가, 삭제

Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved