2017-09-13 5 views
1

첫 번째 열에 2 열 테이블이 있다고 가정 해 보겠습니다. 계좌 번호이고 두 번째 개인 고객 ID이지만 긴 문자열입니다. 해당 문자열에서 몇 가지 다른 클라이언트 ID를 할 수 있으며, 각각은 "ID"나는 그것이 나에게 단지 첫번째 ID를 반환 regexp_substr(upper(note), 'ID[[:digit:]]{4}')를 사용하여 단일 행?SQL - 문자열에서 여러 패턴 수신

account_no|ID 
12345  1111 
12345  2222 
... 
1234  4444 

에 각각 같은 결과를받을 수있는 방법

|account_no | note 
|12345  | AAAAID1111BBBBID2222CCACAID3333JDBSTGDid4444 

시작 전체 문자열에서.

모든 루프 또는 regexps의 트릭이 있습니까?

+1

이것은 도움이 될 수 있습니다. https://stackoverflow.com/documentation/oracle/1968/splitting-delimited-strings#t=20170913180219287842 –

답변

1

CONNECT BY를 사용하여 'ID'문자와 대소 문자를 구분하지 않고 일치하는 문자열을 찾은 다음 하나 이상의 숫자와 선택적으로 줄 끝을 따라 마지막 문자를 찾습니다. 발견되면, 괄호로 둘러싼 것으로 표시된 일치의 숫자 부분 인 두 번째 그룹을 가져옵니다.

with tbl(account_no, note) as (
    select 12345, 'AAAAID1111BBBBID2222CCACAID3333JDBSTGDid4444' from dual 
) 
select account_no, 
     regexp_substr(note, '(ID(\d+))$?', 1, level, 'i', 2) ID 
from tbl 
connect by level <= regexp_count(note, 'ID\d+', 1, 'i'); 
+0

둘 다 감사합니다! Gary_W 완벽하게 작동합니다. 패트릭, 내 능력을 향상시킬 수있는 훌륭한 기반. 다시 한번 감사드립니다. – alektre