我正在使用下面显示的SQL查询来比较AMCcode。但如果我比较AMCcode' 1'使用LIKE运算符,它将使用AMCcode 1,10,11,12,13比较所有条目。 .. 19,21,31 ......等。但我想将AMCcode仅与1匹配。请建议我该怎么做。代码如下:
ISNULL(CONVERT(VARCHAR(10),PM.PA_AMCCode), '') like
(
CASE
WHEN @AMCCode IS NULL THEN '%'
ELSE '%'+@AMCCode+ '%'
END
)
这是代码的一部分,我需要将LIKE运算符替换为任何其他运算符,当我想搜索AMCcode为1时,将给AMCcode 1,而不是所有10,11,12 .....请帮助
答案 0 :(得分:2)
我认为你正在寻找这样的东西:
where ',' + cast(PM.PA_AMCCode as varchar(255)) + ',' like '%,' + @AMCCodes + ',%'
这包括比较中的分隔符。
请注意,更好的方法是拆分字符串并使用join
,如下所示:
select t.*
from t cross apply
(select cast(code as int) as code
from dbo.split(@AMCCodes, ',') s(code)
) s
where t.AMCCode = s.code;
这样做更好,因为在某些情况下,此版本可以使用AMCCode
上的索引。
答案 1 :(得分:2)
如果要与值完全匹配,则无需在查询中使用“%”。你可以像下面这样使用
ISNULL(CONVERT(VARCHAR(10),PM.PA_AMCCode), '') like
(
CASE
WHEN @AMCCode IS NULL THEN '%'
ELSE @AMCCode
END
)
您可以删除案例陈述和查询,如
ISNULL(CONVERT(VARCHAR(10),PM.PA_AMCCode), '') like @AMCCode