我整天都在用一些用于搜索邮政编码的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;,它执行外卡所要做的事情,并找到以输入值开头的所有字符串。
任何帮助或建议都将不胜感激。
答案 0 :(得分:0)
如果您说的是真的,@MailFiveDigitZip
是char
而不是varchar
,那么您就会遇到字符填充问题。
&#34; 44&#34;在varchar(5)
中是&#34; 44&#34;
&#34; 44&#34;在char(5)
中是&#34; 44&#34; (请注意,如果它没有很好地翻译......这是44加3个空格)
要解决此问题,只需将变量@MailFiveDigitZip
从char(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
)
它应该更快地工作..