T SQL 通配符搜索邮政编码

T SQL wildcard searching for a zip code

我整天都在用一些 t-sql 代码来搜索邮政编码。我正在使用通配符来匹配字符串的末尾。但是,它不起作用。它只有在正确输入整个字符串时才有效。

这是我的代码。

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

@MailFiveDigitZip 是一个参数,它是一个 char(5)。它被添加到一个包含多个搜索条件的变量中。我有其他与此类似的代码,实际上是相同的,除了其他代码有一个可以为 null 的 int 的邮政编码,因此 if 条件是“@zipCode 不为空”。但是,我的其他代码有效并且 returns 值,即使对于“44”和“543”等输入,它也执行通配符应该执行的操作并找到所有以输入值开头的字符串。

如有任何帮助或建议,我们将不胜感激。

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

varchar(5) 中的“44”是“44”

char(5) 中的“44”是“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
)

它也应该运行得更快..