我正试图找到所有有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之前或之后排除任何有字母的东西,只返回我正在寻找的字母?
谢谢,
答案 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