2017-02-18 2 views
0

나는 P.O.가있는 모든 주소를 찾으려고합니다. 상자. 그러나, 내 문제는 문자 PO는 거리 이름의 일부가 될 수 있으며 쿼리는 불완전한 결과를 반환합니다.문자열을 제외한 SQL 문이

여기에 나는 아직도 POLK 및 포인트 및 PORTLAND..and 다른 사람과 같은 거리 이름을 얻고있다 위의 코드와

where  (a.address like '%p.o.%' 
or   a.address like '%po %' 
or   a.address like '% po%' 
or   a.address like '% po %' 
or   a.address like '%[^A-Za-z]PO[^A-Za-z]%' 
or   a.address like '%[^A-Za-z]P.O[^A-Za-z]%' 
or   a.address like '%[^A-Za-z]P.O.[^A-Za-z]%') 

... 내가 시도거야. PO 전후에 문자가있는 것을 제외하고 내가 원하는 문자 만 반환하려면 어떻게합니까?

덕분에,

답변

1

귀찮게 할 필요는 대소 문자를 구분 데이터 정렬에없는 경우가 아니면이 시도 :

WHERE 
(
    a.address like '%PO%' 
    OR a.address like '%P.O%' 
    OR a.address like '%P.O.%' 
) 
AND a.address NOT like '%[A-Z]PO%' 
AND a.address NOT like '%PO[A-Z]%' 
AND a.address NOT like '%[A-Z]P.O%' 
AND a.address NOT like '%P.O[A-Z]%' 
AND a.address NOT like '%[A-Z]P.O.%' 
AND a.address NOT like '%P.O.[A-Z]%' 

나는 낮은 문자의 변종을 제거했지만 그들은에만 필요합니다 당신이 사용하는 경우 주소 대/소문자를 구분하는 데이터 정렬

+0

이것은 완벽하게 작동했습니다. 정말 고맙습니다! – BIReportGuy

0

방법 필자는 항상 가능성이 충분해야 다음이

CHECK (a.adress_like(foo, '[POpo]')) 

또는

select * from table where Name like '%POpo%' 
0
where  ' ' + lower(a.address) + ' ' like '%[^a-z]po[^a-z]%' 
     or ' ' + lower(a.address) + ' ' like '%[^a-z]p.o[^a-z]%' 
+0

몇 가지 설명을 추가하면 질문과 StackOverflow 커뮤니티에 도움이됩니다. –

0

같이 무언가를 사용하여이었다 수행

WHERE REPLACE(address,'.','') LIKE '%po%' 
    AND REPLACE(address,'.','') NOT LIKE '%[A-Z]po[A-Z]%' 

당신이 a-z

+0

@DuduMarkovitz 질문에 "PO 이전 또는 이후에 편지가있는 것을 제외하려면 어떻게해야합니까?"라는 질문은 바로 앞이나 뒤에 있어야한다고 말하지 않습니다. –

+0

아마도 그것이 그들이 원하는 것 일지 모르겠습니다. 편집 할 것입니다. –