搜索邮政编码的SQL通配符



我一整天都在摆弄一些用于搜索邮政编码的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"这样的输入,它也会做通配符应该做的事情,并查找以输入值开头的所有字符串。

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

varchar(5)中的"44"为"44"

"44"在char(5)是"44"(注意,以防它不能很好地翻译…这是44加3个空格)

像" 44% "这样的

不符合您的查询条件。

要纠正这个问题,只需将变量@MailFiveDigitZipchar(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
)

相关内容

  • 没有找到相关文章

最新更新