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”等输入,它也执行通配符应该执行的操作并找到所有以输入值开头的字符串。
如有任何帮助或建议,我们将不胜感激。
如果你说的是真的,@MailFiveDigitZip
是 char
而不是 varchar
,那么你 运行 遇到了字符填充问题。
varchar(5)
中的“44”是“44”
char(5)
中的“44”是“44”(注意以防翻译不好...这是 44 加 3 个空格)
赞“44%”不符合您的查询条件
要更正此问题,只需将变量 @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
)
它也应该运行得更快..
我整天都在用一些 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”等输入,它也执行通配符应该执行的操作并找到所有以输入值开头的字符串。
如有任何帮助或建议,我们将不胜感激。
如果你说的是真的,@MailFiveDigitZip
是 char
而不是 varchar
,那么你 运行 遇到了字符填充问题。
varchar(5)
中的“44”是“44”
char(5)
中的“44”是“44”(注意以防翻译不好...这是 44 加 3 个空格)
赞“44%”不符合您的查询条件
要更正此问题,只需将变量 @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
)
它也应该运行得更快..