Oracle DBMS 정규표현식 뒤에서부터 찾기

정규표현식으로 원하는 문자열을 찾고 싶은데, 문자열에서 가장 마지막으로 찾은 값을 가져오고 싶을 때에는 어떻게 하면 좋을까요?

일반적인 프로그램에서는 해당 언어/라이브러리에서 제공하는 기능을 이용해서 가장 마지막으로 찾은 값을 가져올 수 있겠지만, Oracle DBMS에서는 지원하지 않았습니다.

찾으려는 문자열은 다음과 같았습니다.
유형1: '|aaa|bbb|ccc'
유형2: '|aaa||ccc'
유형3: '|aaa|bbb|'
유형4: '|aaa||'
유형5: '||bbb|ccc'

일종의 배열인데, "|"를 구분자로 사용한 것입니다.
각 유형 별로 가장 마지막의 데이터를 찾는 것이 목적이었습니다.
예를 들면..
유형1: ccc
유형2: ccc
유형3: bbb
유형4: aaa
유형5: ccc
이렇게 찾아야 하는 것이죠.

결론부터 말하자면 문자열을 반대로 뒤집어서 문제를 해결했습니다.
(이 간단한 걸 생각하지 못해서 반나절을 고민했네요..)
SELECT REVERSE(REGEXP_SUBSTR(REVERSE('|aaa|bbb|ccc|ddd'), '[^|]+')) FROM DUAL;

참고로 배열의 첫번째 요소를 찾을 때에는 다음과 같이 합니다.
SELECT REGEXP_SUBSTR('|aaa|bbb|ccc|ddd', '[^|]+') FROM DUAL;

쿼리문 테스트는 https://livesql.oracle.com에서 해보실 수 있습니다.

댓글

이 블로그의 인기 게시물

프로세스 강제 종료 불가 시.

Visual Studio 디버깅 시 멈춰있는 문제