2013-10-20 3 views
1

정말 상처 받기 시작했습니다!오라클 정규식 쿼리에서 작은 따옴표를 이스케이프 처리

나는 일반적으로 이름 (비 알파, 공백, 하이픈 작은 따옴표에 포함되지 charachters를 포함하는 모든 성과 이름을 찾기 위해 정규식 조건을

내 목적이다 사용하여 Oracle 개발자의 쿼리를 작성하려고 해요)

는 즉 나는

J00ls 
McDonald "Macca" 
Smithy (Smith) 

을 찾아 NOT 찾을 필요가

Smith 
Mckenzie-Smith 
El Hassan 
O'Dowd 

내 존재하는 쿼리는 따옴표를 제외하고 예상되는 모든 것을 제외

select * from dm_name 
WHERE regexp_like(last_name, '([^A-Za-z -])') 
and batch_id = 'ATEST'; 

이다. 작은 따옴표 문자를 넣을 때, Oracvel SQL Develoepr 파서는이를 리터럴로 사용합니다.

이 나는 ​​시도했다 : 나는 당신이 제공 할 수있는 것도 감사하겠습니다

\' -- but got a "missing right parenthesis" error 
||chr(39)|| -- but the search returned nothing 
'' -- negated the previous character in the matching group e.g. '([^A-Za-z -''])' made names with '-' return. 

.

답변

2

다음 작품 :

select * 
    from dm_name 
    WHERE regexp_like(last_name, '([^A-Za-z ''-])'); 

See this SQLFiddle.

SQL Developer가 마음에 들었는지 여부는 제품을 설치하지 않았으므로 확인할 수없는 것입니다.

공유하고 즐기십시오.

3

견적을 이스케이프 처리하려면 작은 따옴표를 두 번 입력하십시오.

그래서
select * 
    from dm_name 
where regexp_like(last_name, '[^A-Za-z ''-]') 
    and batch_id = 'ATEST' 

또한이 sqlfiddle 참조하십시오. 참고, SQL 개발자와 비슷한 쿼리를 시도하고 바이올린뿐만 아니라 작동합니다.

참고 또한, 이것은 - 문자를 작동하려면, 그렇지 않으면 오히려 문자 -보다 그룹에 SPACE'에를 찾기 위해 시도로 그룹의 마지막 문자이어야합니다.

관련 문제