메뉴 건너뛰기

조회 수 8620 추천 수 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




List of Articles
번호 제목 날짜 조회 수
21 TOAD 에서 SQL Builder 을 사용하여 DML 문서 작성을 자동화 해본다 file 2016.08.30 7507
20 Toad 사용시 캐릭터 인코더 UTF-8 로 변경하기 file 2016.08.30 10085
19 Oracle 에서 NVL, NVL2 함수 사용하는 예제 2016.08.30 8335
18 rownum 으로 범위지정을 해주고 싶을 때 2016.08.30 8623
17 Oracle 시퀀스 생성, 추가, 삭제 file 2016.08.30 8151
16 TOAD 에서 Edit 를 통해 sql문을 작성할때 참고해야할 View file 2016.08.30 7468
15 UNION ALL 과 ORDER BY 섞어서 쓰기 2016.08.30 9898
14 오라클(Oracle) 대용량 데이터 토드(Toad)를 이용해서 넣기 file 2016.08.30 8031
13 간단한 쿼리로 일련번호 쉽게 넣기 - ROWNUM 사용 file 2016.08.29 9472
12 Oracle에서 ORA-28000: 계정이 잠금되었습니다. - 해결 방법 file 2016.08.29 7323
11 WHERE절에서 Null 값 비교하기 file 2016.08.29 9354
10 Oracle에서 Foreign Key가 걸려있는 컬럼값 업데이트(update) 하기 file 2016.08.29 9170
9 Oracle에서 사용자가 생성한 모든 Table, View를 삭제하는 쿼리 만들기 file 2016.08.29 7464
8 Oracle에서 세자리 콤마 찍기 file 2016.08.29 11720
7 Merge into를 이용해서 insert나 update를 자동으로 실행하자. 2016.08.29 7572
6 조건절에 WHERE 1=1, WHERE 1=0 사용하여 쿼리 간편하게 사용하기 file 2016.08.29 9613
5 Oracle에서 중복 조인을 피하기 위한 Update 방법 (MERGE 사용) 2016.08.29 8145
4 단일행을 다중 row로 분리, 다중 row 결과를 단일행으로 연결하는 방법 2016.08.29 9386
3 WITH문으로 쿼리를 임시테이블이나 View처럼 사용하자. 2016.08.29 8379
2 Oracle 저장 프로시저 샘플 2016.08.29 7140
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved