2009-09-11 3 views
3

Oracle 10g에서는 두 문자열간에 다른 문자를 나열하는 정규 표현식을 작성하려고합니다.두 문자열 사이의 고유 한 문자 차이를 나열하는 Oracle 정규식

이유는 다음과 같습니다. 프랑스어가 아닌 유니 코드 문자가 들어있는 테이블이 있습니다.

나는이 쿼리와 미래 정리를 만들기 위해이 nonstandards 문자를 포함하는 행을 표시 할 수 있어요 :

SELECT DataID, Name, CONVERT(NAME, 'WE8ISO8859P1', 'WE8DEC') 
    FROM table 
    WHERE NAME <> CONVERT(NAME, 'WE8ISO8859P1', 'WE8DEC') 

곳 WE8ISO8859P1 - 서유럽 (나는 동의 함)

및 WE8DEC - 8 디지털 장비 회사의 비트 문자 세트 (애플리케이션 지원을 알고 있음)

오라클 정규 표현식을 사용하면 이러한 모든 비표준 목록을 추출 할 수있을 것이라고 생각합니다. s 문자. 하지만 오라클의 정규 표현식에 익숙하지 않아 도움이 될 것입니다.

select regexp_replace("éaé", '[a-z][A-Z]', '') from dual; 

정리에 문자로 "é"를 줄 것이다 : 여기

내 (작동하지 않는) 생각이다.

SQL> select regexp_replace('éaéABcdEF', '([a-zA-Z])', '') problems from dual; 

PROBLEMS 
-------- 
éé 

그것은 당신에게 당신이 식별 할 문자의 각 발생을 제공하지만, 아마도 그건 문제가되지 않습니다 또는 당신은 그것을 구체화 할 수 있습니다 .. :

답변

3

아마도 이런 걸 당신이 올바른 방향으로 가고 얻을 수 있습니다

0

귀하의 유일한 실수는 질문의 첫 번째 매개 변수에 큰 따옴표를 사용하는 것입니다. 일반적으로 큰 따옴표는 열/테이블 이름에만 사용됩니다.

DCookie가 추가 된 괄호는 정규 표현식을 여러 번 일치시킵니다. 이름 필드의 내용에 따라 puncuation을 포함하여 더 많은 문자를 replace 절에 추가해야 할 수도 있습니다 (따옴표와 일치 시키려면 두 개의 작은 따옴표 사용). 여기 당신을위한 시작이다 :

SELECT regexp_replace(name, '([a-zA-Z ,.;''"])\-?','') problem_characters , count(*) 
FROM table 
    WHERE NAME <> CONVERT(NAME, 'WE8ISO8859P1', 'WE8DEC') 
group by regexp_replace(name, '([a-zA-Z ,.;''"])\-?',''); 
-1
SELECT LISTAGG(letter, '') WITHIN GROUP(ORDER BY letter) 
     FROM (SELECT DISTINCT substr('aaaaabcde', level, 1) letter 
        FROM dual CONNECT BY level <= length('aaaaabcde')) 
+0

이 aaaaabcde 'DISTINCT SUBSTR ( 을 선택 ( FROM ( 그룹 내에서 (편지 BY ORDER) LISTAGG 편지, 을') 'SELECT', 레벨,) FROM 이중 연결 레벨 <= 길이 (' aaaaabcde ') ) –

관련 문제