SQL语句不包括字符串

时间:2017-02-18 19:00:04

标签: sql sql-server

我正试图找到所有有P.O.的地址。框。但是,我的问题是PO字母可能是街道名称的一部分,查询返回不完整的结果。

这是我尝试过的......

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 ......等街道名称。如何在PO之前或之后排除任何有字母的东西,只返回我正在寻找的字母?

谢谢,

4 个答案:

答案 0 :(得分:1)

where       ' ' + lower(a.address) + ' ' like '%[^a-z]po[^a-z]%'
        or  ' ' + lower(a.address) + ' ' like '%[^a-z]p.o[^a-z]%'

答案 1 :(得分: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]%'

我已删除了较低的字母变体,但只有在对地址使用区分大小写的排序规则时才需要它们

答案 2 :(得分:0)

我总是这样做的方式是使用看起来像这样的东西

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

select * from table where Name like '%POpo%'

答案 3 :(得分:0)

以下内容应该足够好了

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

除非您使用区分大小写的排序规则,否则无需担心a-z