2009-09-14 6 views
1

내가 문자열을 그 안에 다음과 같은 정확한 패턴, 즉이 있는지 확인하는 수단이 필요합니다오라클 PL/SQL의 REGEXP_LIKE이/REGEXP_INSTR

(P) 

예는이 사실이 될 것입니다 :

'테스트 시스템 (P)'

확실 경우에 확인하는 방법하지만 때 '(P)'가없는 문자열, 즉 :

'테스트 시스템 (교수에 대한 GUI)'-이에 이 경우 b e false이지만 REGEXP_LIKE를 사용하고 있으며 실제로 TRUE를 반환합니다.

'(P)'의 정확한 문자열이 검색 문자열 내에있는 경우에만 True를 반환하기를 원합니다.

PL/SQL을 사용하여이를 달성하는 데 도움이 될 것입니다.

감사합니다.

답변

4

사용 :

REGEX_LIKE(t.column, '\(P\)') 

Regular-Expressions.info은 훌륭한 자원이다.

정기 INSTR 작동합니다 (오라클 8i를 +) :

WHERE INSTR(t.column, '(P)') > 0 --column contains '(P)' 

WHERE INSTR(t.column, '(P)') = 0 --column does NOT contain '(P)' 

LIKE도 작동합니다

WHERE t.column LIKE '%(P)%' --column contains '(P)' 

WHERE t.column NOT LIKE '%(P)%' --column does NOT contain '(P)' 
+0

그 사람들에게 감사합니다 – tonyf

+0

null에주의하십시오. –

2

like을 시도해보십시오

WHERE thing like '%(P)%'; 
+0

동의합니다. 정규 표현식을 확인하지 않으면 왜 REGEXP 함수를 사용해야합니까? –

0

내가 당신과 같이 REGEXP_* 기능을 충실 것 어쨌든 연습하고 정규 표현식을 알아야합니다. 당신을 잘 섬길 것입니다.

포니의 첫 번째 답변의 오타를 제외하고 모두 좋은 답변입니다. :

이 글 : REGEX_LIKE(t.column, '\(P\)')

올바른 : REGEXP_LIKE(T.COLUMN, '\(P\)')

'\'는 "돈을 말한다 이스케이프 문자입니다

오타는 P이 REGEX_LIKE에서 누락이 있다는 것입니다 다음 문자의 상징적 인 의미를 찾지 말고 문자 그대로의 문자 자체를 찾으십시오. "