T SQL通配符搜索邮政编码

时间:2015-06-09 15:34:03

标签: sql search wildcard

我整天都在用一些用于搜索邮政编码的t-sql代码搞乱。我使用外卡来匹配字符串的结尾。但是,它不起作用。它仅在正确输入整个字符串时有效。

这是我的代码。

IF (@MailFiveDigitZip <> '')
            BEGIN
               SET @Conditions = @Conditions + ' AND (cast(MailFiveDigitZip AS Varchar(5)) LIKE cast(@MailFiveDigitZip AS Varchar(5)) + ''%'' )'
        END;

@MailFiveDigitZip是一个参数,它是一个char(5)。它被添加到包含多个搜索条件的变量中。我有其他类似的代码,实际上是相同的,除了其他代码的邮政编码是一个可以为空的int,因此if条件是&#39; @zipCode不是空的&#39;。但是,我的其他代码工作并返回值,即使对于诸如&#34; 44&#34;之类的输入也是如此。和&#34; 543&#34;,它执行外卡所要做的事情,并找到以输入值开头的所有字符串。

任何帮助或建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果您说的是真的,@MailFiveDigitZipchar而不是varchar,那么您就会遇到字符填充问题。

&#34; 44&#34;在varchar(5)中是&#34; 44&#34;

&#34; 44&#34;在char(5)中是&#34; 44&#34; (请注意,如果它没有很好地翻译......这是44加3个空格)

喜欢&#34; 44%&#34;不符合您的查询条件。

要解决此问题,只需将变量@MailFiveDigitZipchar(5)更新为varchar(5)

答案 1 :(得分:0)

为什么不使用:

AND (
left(MailFiveDigitZip,1)=@MailFiveDigitZip OR
left(MailFiveDigitZip,2)=@MailFiveDigitZip OR
left(MailFiveDigitZip,3)=@MailFiveDigitZip OR
left(MailFiveDigitZip,4)=@MailFiveDigitZip OR
left(MailFiveDigitZip,5)=@MailFiveDigitZip
)

它应该更快地工作..