2017-02-18 343 views
0

我试图找到所有具有P.O.的地址。框。但是,我的问题是字母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和点和PORTLAND..and其他街道名称。我如何排除PO之前或之后有字母的任何内容,并且只返回我正在查找的字母?

感谢,

回答

1

打扰试试这个区分大小写的排序规则

+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 
(
    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]%' 

我已经删除了较低的字母变体,但他们只需要:

除非你是一个区分大小写的排序规则,不需要与a-z

+0

@DuduMarkovitz问题说:“我如何排除在PO之前或之后有字母的任何东西”,它没有说他们必须紧接在之前或之后。 –

+0

虽然可能这就是他们想要的。将编辑。 –