2017-02-18 3 views
0

Я пытаюсь найти все адреса, у которых есть P.O. Box. Однако моя проблема заключается в том, что буквы PO могут быть частью названия улицы, а запрос возвращает неполные результаты.SQL-заявление, за исключением строк

Вот что я пытался ...

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]%') 

С выше кодой я все еще получаю название улиц, как Polk и POINT и PORTLAND..and другие. Как я исключаю все, что имеет письма до или после ПО и только возвращает письма, которые я ищу?

Спасибо,

ответ

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 В этом вопросе говорится: «Как я исключаю все, что имеет письма до или после ПО», он не говорит, что должен быть непосредственно до или после. –

+0

Хотя, возможно, это то, чего они хотят. Будет редактировать. –