2013-10-07 4 views
2

Names 인 컬럼을 쿼리하여 정확히 2“a”이 포함 된 이름 만 가져올 수 있습니까? 만은 정확히이 문자를문자열의 정확히 2 문자 일치 -

나는 LIKE 사용하지만 난 %a을 쓸 때 즉,도 1 a 모든 이름을 발견 한 것 % 기호 잘 알고,하지만 난 찾을 필요가있다.

설명해주십시오 - 미리 감사드립니다

테이블 이름 : "사람들"

열 이름 : "이름, 나이, 성별"

답변

4

사용 '_a'. '_'은 단일 문자 와일드 카드이며 '%'은 0 자 이상의 문자와 일치합니다.

고급 일치가 필요한 경우 REGEXP_LIKE을 사용하는 정규식을 사용하십시오. Using Regular Expressions With Oracle Database을 참조하십시오.

물론 다른 트릭도 사용할 수 있습니다. 예를 들어, 문자열의 길이를 같은 문자열의 길이와 비교할 수 있지만 'a'를 제거합니다. 차이가 2이면 문자열에 두 개의 'a'가 포함됩니다. 하지만 문자열이 비어있을 때 length가 'null'을 반환하므로 곧 '추한'이름을 확인하려는 경우 예외가 발생해야합니다.

select * from People 
where 
    length(Names) - 2 = nvl(length(replace(Names, 'a', '')), 0) 
+1

고마워요. 그것은 작동했습니다 :) 나는'nvl'의 사용법에 대해 몰랐습니다. 왜냐하면 저는 SQL에 익숙하지 않았기 때문입니다. 질문을 +1해도 좋을지 모르지만, 많은 사람들이 똑같은 상황에 부딪 힐 수 있습니다. 감사합니다. –

+0

완료. :)'nvl'은 오라클 발명품이며 SQL에 공통적 인 것이 아닙니다. SQL 서버와 같은 다른 데이터베이스는'isnull'을 사용합니다. 좀 더 이식성이 좋은 대안은'합병 '이지만 글자가 더 많고 철자법이 어렵다. ;-) – GolezTrol

4

이 개 a 문자가 세 두 A의로 문자열을 검색하지만 당신이 요구하는지 가정.

select names 
from people 
where length(regexp_replace(names, '[^a]', '')) = 2; 

이 또한 대문자로 A의 거래를 확장 할 수 있습니다 : 결과 문자열은 정확히 두 문자 긴 경우

select * 
    from people 
where names like '%a%a%' 
    and name not like '%a%a%a%' 
+0

고마워요. 트릭도 잘 작동했습니다. 선생님, 질문을 +1해도 똑같은 상황에서 많은 사람들이 닥칠 수 있습니다. 감사합니다. –

1

또 다른 해결책은 아무것도 가진 a가 아닌 모든 것을 교체하고 확인하는 것입니다 :

select names 
from people 
where length(regexp_replace(names, '[^aA]', '')) = 2; 

SQLFiddle 예 : http://sqlfiddle.com/#!4/09bc6

-1

select * from People where names like '__';도 유용 할 것입니다.

+0

StackOverFlow 메이트에 오신 것을 환영합니다. 응답은 이미 많은 답변을 가지고 있으며 그 중 하나가 허용됩니다. 따라서 답변에 콘텐츠를 추가 할 수없는 경우 답변을 반복하지 마십시오. 먼저 새로운 것을 가지고 있는지 확인하고 답변을 게시하기 전에 다른 사람이 대답을 반복하는지 확인하십시오. – Chirag