CREATE OR REPLACE FUNCTION GETTEXTTRIM
(
P_TEXT VARCHAR2
) RETURN VARCHAR2
IS
/*
* PGM ID : GETTEXTTRIM
* TITLE : 영문/숫자/한글 제외 기타 문자 제거
* AUTHOR : grapro.lim
* DATE : 2010.04.14
* VERSION : 1.0
* CONTENTS : 영문/숫자/한글 제외 기타 문자를 제거하며 2BYTE 영숫자를 1BYTE 문자로 치환
*/
V_RESULT VARCHAR2(350) := NULL;
V_CNT NUMBER := 0;
V_TCNT NUMBER := 0;
BEGIN
IF P_TEXT IS NULL THEN
RETURN NULL;
END IF;
V_TCNT := LENGTH(P_TEXT);
LOOP
EXIT WHEN V_CNT >= V_TCNT ;
V_CNT := V_CNT + 1;
IF ASCIISTR(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN '\AC00' AND '\D7A3' -- 한글
OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 48 AND 57 -- 숫자
OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 97 AND 122 -- 영문 소문자
OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 65 AND 90 -- 영문 대문자
OR 1=0 THEN
V_RESULT := V_RESULT || UPPER(SUBSTR(P_TEXT,V_CNT,1));
END IF;
IF ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 41953 AND 41978 -- 2바이트 영문 소문자
OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 41921 AND 41946 -- 2바이트 영문 대문자
OR ASCII(SUBSTR(P_TEXT,V_CNT,1)) BETWEEN 41904 AND 41913 -- 2바이트 숫자
OR 1=0 THEN
V_RESULT := V_RESULT || UPPER(CHR(ASCII(SUBSTR(P_TEXT,V_CNT,1))-41856));
END IF;
END LOOP;
RETURN V_RESULT;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END;
'전산Tip > Oracle' 카테고리의 다른 글
오라클 펑션 - 문자형숫자인지 확인 (0) | 2010.04.14 |
---|---|
오라클 - 12개월치 데이타로 다양한 파생컬럼 생성하기 (0) | 2008.11.13 |
오라클 권한 설명 및 확인 (0) | 2008.10.14 |