본문 바로가기

Oracle

오라클 숫자 or 문자 확인. 필터링 함수(translate)

REPLACE 함수와 비슷하게 문자열을 치환해주는 기능을 하는데 표현식을 이용할 수 있어서
대상 문자열이 숫자 또는 문자를 판단할 때 간편하게 사용할 수 있습니다.


1. 단순 문자열 치환 : TRANSLATE('대상문자열', '비교문자', '바꿀문자')
    > select translate('12345', '1', 'x')  from dual;
    > select replace('12345', '1', 'x')  from dual;

 둘다 결과값은 동일합니다.


2. 숫자 제거 : TRANSLATE('대상문자열', ' +.0123456789', ' ')
    > select translate('abc1def2', ' +.0123456789', ' ')  from dual

 숫자 1,2 가 제거되고 'abcdef' 을 리턴합니다.

 응용하면,
 > select nvl(length(translate('a', ' +.0123456789', ' ')),0)  from dual     ==> 1을 리턴
 > select nvl(length(translate('1', ' +.0123456789', ' ')),0)  from dual     ==> 0을 리턴

 위와 같이 숫자 여부 판단에 사용될 수 있습니다. 왠지 숫자여부 판단하는 함수가 있을듯한데;;


3. 문자 제거 : TRANSLATE('대상문자열', '0123456789'||'대상문자열', '0123456789')
    > select translate('abc1def2', '0123456789' || 'abc1def2', '0123456789')  from dual          ==> 12를 리턴

 응용하면,
 > select translate('010-123-4567', '0123456789' || '010-123-4567', '0123456789')  from dual  ==> 0101234567 을 리턴

 예) select TRANSLATE('전화번호', '0123456789'||'전화번호', '0123456789') from dual;
 숫자만 리턴됩니다~


오라클 8i 이상부터는 이용할 수 있습니다.