기본 콘텐츠로 건너뛰기

윈도우에서 오라클19c 설치 중 ins-35180 오류 발생 시 조치 방법

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에서 해보실 수 있습니다.

댓글

이 블로그의 인기 게시물

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

특정 프로세스를 강제 종료 하려는데... "실행 중인 작업 인스턴스가 없습니다." 이런 메시지가 나타나면서 종료가 안되는 문제가 있었습니다. 작업 관리자에서 "프로세스 종료", "프로세스 트리 종료" 해봐도 안되고, cmd에서 taskkill 해봐도 안되고... 그런데 이게 부모 프로세스를 종료하면 자동으로 종료가 되네요.. (제 경우에는 Visual Studio가 부모 프로세스였습니다. ㅋ) 참고: DEVPIA http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=917792&ref=917791