WITH TMP AS ( SELECT REPLACE( 'aaa' || CHR(10) || CHR(10) || CHR(10) || 'bbb' || CHR(10) || CHR(10) || CHR(10) || CHR(10) || 'ccc' || CHR(10) || 'ddd' || CHR(10) || CHR(10) || CHR(10) || 'eee' , CHR(10), '▨ ') TXT --> 줄바꿈 문자를 잘 사용 안하는 문자로 대체 FROM DUAL ) SELECT REPLACE(LISTAGG(TXT2) WITHIN GROUP(ORDER BY RN) , '▨', CHR(10)) AS TXT FROM ( SELECT RN , TXT , LAG_TXT , CASE WHEN TXT = LAG_TXT THEN '' ELSE TXT END TXT2 FROM ( SELECT ROWNUM RN , TRIM(REGEXP_SUBSTR(TXT,'[^▨]+', 1, ROWNUM)) || '▨' TXT , LAG(TRIM(REGEXP_SUBSTR(TXT,'[^▨]+', 1, ROWNUM)) || '▨') OVER (ORDER BY ROWNUM) LAG_TXT --, LEAD(TRIM(REGEXP_SUBSTR(TXT,'[^▨]+', 1, ROWNUM)) || '▨') OVER (ORDER BY ROWNUM) LEAD_TXT FROM TMP CONNECT BY ROWNUM <= LENGTH(REGEXP_REPLACE(TXT,'[^▨]+')) + 1 ) ) WHERE TXT2 IS NOT NULL ; 이렇게 해보았는데 마지막 eee 처리가 안되네요...
줄바꿈이 CHR(13)||CHR(10) 두개 조합으로 이루어 졌다고 가정하면
거꾸로 조합된 CHR(10)||CHR(13) 을 지우면 됩니다.
1310131013101310
WITH t AS ( SELECT 'aaa' || CHR(13)||CHR(10) || CHR(13)||CHR(10) || 'bbb' || CHR(13)||CHR(10) || CHR(13)||CHR(10) || CHR(13)||CHR(10) || 'ccc' || CHR(13)||CHR(10) || 'ddd' || CHR(13)||CHR(10) || CHR(13)||CHR(10) || 'eee' txt FROM dual ) SELECT txt , REPLACE(txt, CHR(10)||CHR(13)) x FROM t ;
와우....머리를 띵 치네요~~~
마농님 만약 위에서 제가 한것 처럼 동일 값이 연속일 경우 2개(?)까지만 허용인 경우 에는 어떻게 해야 할까요??
WITH TMP AS ( SELECT REPLACE( 'aaa' || CHR(10) || CHR(10) || CHR(10) || 'bbb' || CHR(10) || CHR(10) || CHR(10) || CHR(10) || 'ccc' || CHR(10) || 'ddd' || CHR(10) || CHR(10) || CHR(10) || 'eee' , CHR(10), '▨ ') TXT --> 줄바꿈 문자를 잘 사용 안하는 문자로 대체 FROM DUAL ) SELECT ROWNUM RN , TRIM(REGEXP_SUBSTR(TXT,'[^▨]+', 1, ROWNUM)) || '▨' TXT --, LAG(TRIM(REGEXP_SUBSTR(TXT,'[^▨]+', 1, ROWNUM)) || '▨') OVER (ORDER BY ROWNUM) LAG_TXT --, LEAD(TRIM(REGEXP_SUBSTR(TXT,'[^▨]+', 1, ROWNUM)) || '▨') OVER (ORDER BY ROWNUM) LEAD_TXT --, ROW_NUMBER() OVER (PARTITION BY TRIM(REGEXP_SUBSTR(TXT,'[^▨]+', 1, ROWNUM)) || '▨' ORDER BY ROWNUM) CNT FROM TMP CONNECT BY ROWNUM <= LENGTH(REGEXP_REPLACE(TXT,'[^▨]+')) + 1 ;
다음과 같은 데이터에서
RN | TXT | 원하는값 | 또는 |
1 | aaa▨ | 1 | 1 |
2 | ▨ | 2 | 1 |
3 | ▨ | 3 | 2 |
4 | bbb▨ | 1 | 1 |
5 | ▨ | 2 | 1 |
6 | ▨ | 3 | 2 |
7 | ▨ | 4 | 3 |
8 | ccc▨ | 1 | 1 |
9 | ddd▨ | 1 | 1 |
10 | ▨ | 2 | 1 |
11 | ▨ | 3 | 2 |
12 | eee▨ | 1 | 1 |
저런식의 값을 부여할 수 있을까요?