본문 바로가기

데이터베이스/오라클DB

TRANSLATE 함수로 정규식같은 효과 내기

0!1DDDFSDDFSD02@-9874-5612AWE!@

라는 문자열에서 숫자만 추출하고 싶다면, 정규식을 사용하는 것이 가장 편하고, 빨리 생각나는 방법이다.

하지만 낮은 오라클 버전에선 정규식을 사용할 수 없다.

그 때 사용할 수 있는 것이 바로 TRANSLATE함수다.

 

숫자만 추출할 때

SELECT TRANSLATE('0!1DDDFSDDFSD02@-9874-5612AWE!@','0123456789'||'0!1DDDFSDDFSD02@-9874-5612AWE!@' ,'0123456789') AS TRANSLATE FROM DUAL;

TRANSLATE(인자1, 인자2, 인자3) 이라고 할 때, 

인자 1에 있는 숫자만 남기기 => 숫자는 0~9까지

인자 2 인 치환대상에 0123456789+ 인자 1(적용대상)을 적고

인자 3(치환 문자열)에 0~9를 적으면 '0!1DDDFSDDFSD02@-9874-5612AWE!@'의  숫자가 아닌 것들은 다 제거된다.

 

반대로, 문자만 추출에도 이용 가능함

SELECT TRANSLATE('0!1DDDFSDDFSD02@-9874-5612AWE!@','X0123456789' ,'X') AS TRANSLATE FROM DUAL;

저기 들어가는 X는 아무 의미없음, 공백도 가능

인자 1에 x가 있다면 x로 바꾸고, 0123456789의 경우 인자1, 2엔 있지만 3에 없으니까 1에서 삭제될것

=> 인자 1에서 숫자만 삭제, 인자 2에 인자 1에 있는 특문, 영문자들이 없으므로 그대로 그것들만 남게 된다.

SELECT TRANSLATE('0!1DDDFSDDFSD02@-9874-5612AWE!@',' 0123456789' ,' ') AS TRANSLATE FROM DUAL;