by SQL [2024.07.26 16:27:11]
오라클 clob 형식의 문자열을 다중구분자(@#&)로 구분하여 행을 분리하는 로직 구현중입니다.
clob 형식의 특성상 가장 긴 데이터의 경우 855만자를 초과하여
테스트 데이터를 만들어서 문의드립니다.
SELECT REGEXP_SUBSTR(a.DATA, '[^@#&]+', 1, b.row_cnt) AS val
FROM (SELECT '회사코드|A@#&부서코드|AA@#&부서명|R&D센터' DATA FROM DUAL
UNION ALL
SELECT '회사코드|C@#&부서코드|CC@#&부서명|기획센터' DATA FROM DUAL) A
, (SELECT LEVEL row_cnt FROM dual CONNECT BY LEVEL <= 20) b
WHERE b.row_cnt <= REGEXP_COUNT(a.DATA, '@#&') + 1;
질문은
@#& 특수문자 3개를 조합한 컬럼을 구분자로 쓰고있는데,
이를 활용하여 행분리를 하고자 했는데
@, #, & 중 한개만 들어가도 분리가되고있습니다
도와주세요ㅠㅠ
<원하는 결과값>
회사코드|A
회사코드|C
부서코드|AA
부서코드|CC
부서명|R&D센터
부서명|기획센터
<실제 결과값>
회사코드|A
회사코드|C
부서코드|AA
부서코드|CC
부서명|R
부서명|기획센터
그냥 위아래 같은 조건으로 깔맞춤 하려고 바꿨습니다.
혹시 정규식 때문에 느리다면? 정규식을 빼 보세요.
WHERE b.row_cnt <= LENGTH(a.v) - LENGTH(REPLACE(a.v, '♪')) + 1
오늘도 많이배워갑니다ㅠ 감사합니다~!