我一整天都在摆弄一些用于搜索邮政编码的t-sql代码。我使用通配符来匹配字符串的末尾。然而,这并不奏效。它只有在正确输入整个字符串时才有效。
这是我的代码。
IF (@MailFiveDigitZip <> '')
BEGIN
SET @Conditions = @Conditions + ' AND (cast(MailFiveDigitZip AS Varchar(5)) LIKE cast(@MailFiveDigitZip AS Varchar(5)) + ''%'' )'
END;
@MailFiveDigitZip是一个参数,它是一个字符(5)。它被添加到一个包含多个搜索条件的变量中。我有其他类似的代码,实际上是相同的除了其他代码有一个邮政编码是一个可空的int,所以if条件是'@zipCode不为空'。然而,我的其他代码工作并返回值,即使对于"44"one_answers"543"这样的输入,它也会做通配符应该做的事情,并查找以输入值开头的所有字符串。
如果你说的是真的,@MailFiveDigitZip
是char
而不是varchar
,那么你就遇到了字符填充问题。
varchar(5)
中的"44"为"44"
"44"在char(5)
是"44"(注意,以防它不能很好地翻译…这是44加3个空格)
不符合您的查询条件。
要纠正这个问题,只需将变量@MailFiveDigitZip
从char(5)
更新为varchar(5)
为什么不使用:
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
)