2016-09-03 1 views
-1

반복되는 문자를 제거하기 위해 oracle REGEXP_REPLACE 함수를 사용하려고합니다.regexp_replace 문자열 사용

("ABC","DEF,,,,",,,"111",,,"HI") 

가 출력되어야 :

("ABC","DEF,,,,","111","HI") 

이것을 달성하기 위해, i는 다음 코드를

SELECT REGEXP_REPLACE(("ABC","DEF,,,,",,,"111",,,"HI")','[,]{2,}','(,)) 
FROM DUAL; 

이것은 제거된다 시도

문자열은 다음과 같다 doble 따옴표 안에 쉼표. 누군가가 큰 따옴표 안에 중복 쉼표를 제거하는 방법을 말해 줄 수 있습니까?

+0

궁극적 인 목표는 무엇입니까? 아마도 최종 결과에 도달하는 더 좋은 방법이있을 것입니다. 즉, NULL 열 (연속 쉼표)이있는 스프레드 시트에서 데이터를 가져 오는 것 같습니다. sqlldr을 통해 테이블에로드하는 작업을 끝내려는 경우 필드 1,2,5 및 8에만 관심이있는 경우 제어 파일에서이 작업을 처리 할 수 ​​있습니다. –

+0

궁극적 인 목표는 반복되는 쉼표 또는 일부 특수 문자를 제거하는 것입니다. 입력 문자열에 이중 따옴표를 두 번 이상 표시합니다. 이것은 UI에서 가져옵니다. 다른 예를 들어 말해봐. 입력 문자열은 "AAAAA123 !!!!", "BBB", !!!!!, "CAAD", !!!)입니다. 결과는 "AAAAA123 !!!!", "BBB",!, "CADD",!)입니다. regexp_replace 문자열을 사용하여이 작업을 수행하려고합니다. 그게 가능한지 내가 아는 한가? 미리 감사드립니다. – sen

+0

반복되는 문자는 어디에서 소개됩니까? UI 또는 사용자? UI에서 데이터베이스의 데이터를 추출하는 프로그램? 한 번 정리 된 데이터로 무엇을합니까? 더 큰 그림을 공유하십시오, 더 나은 해결책을 제공하기 위해 큰 그림을 이해하는 데 도움이 될 수 있습니다. –

답변

0
SELECT LISTAGG('"'||test||'"', ',') 
    WITHIN GROUP (order by r) "t" from 
(select rownum r ,regexp_substr(q'"ABC","DEF,,,,",,,"111",,,"HI"','[^"]+', 1, level) test from dual 
connect by regexp_substr(q'"ABC","DEF,,,,",,,"111",,,"HI"', '[^"]+', 1, level) is not null) 
where regexp_count(test, ',') != LENGTH(test) 

이 작동합니다.

+0

고맙습니다. 내가 그것을 시도하자 또한 위의 기준을 달성하기 위해 regexp replace 함수를 직접 사용할 수있는 방법이있다. 미리 감사드립니다. – sen