如何在不使用 LIKE 的情况下比较 SQL 中的字符串
how to compare string in SQL without using LIKE
我正在使用下面显示的 SQL 查询来比较 AMCcode。但是,如果我使用 LIKE 运算符比较 AMCcode“1”,它会将所有条目与 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 运算符替换为任何其他运算符,当我想搜索 1 的 AMCcode 而不是所有 10、11、12 时,它将为 AMCcode 提供 1.... . 请帮助
我想你正在寻找这样的东西:
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
上的索引。
如果您想精确匹配该值,则无需在查询中使用“%”。您可以像下面这样使用
ISNULL(CONVERT(VARCHAR(10),PM.PA_AMCCode), '') like
(
CASE
WHEN @AMCCode IS NULL THEN '%'
ELSE @AMCCode
END
)
也许您可以删除 case 语句和查询,例如
ISNULL(CONVERT(VARCHAR(10),PM.PA_AMCCode), '') like @AMCCode
我正在使用下面显示的 SQL 查询来比较 AMCcode。但是,如果我使用 LIKE 运算符比较 AMCcode“1”,它会将所有条目与 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 运算符替换为任何其他运算符,当我想搜索 1 的 AMCcode 而不是所有 10、11、12 时,它将为 AMCcode 提供 1.... . 请帮助
我想你正在寻找这样的东西:
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
上的索引。
如果您想精确匹配该值,则无需在查询中使用“%”。您可以像下面这样使用
ISNULL(CONVERT(VARCHAR(10),PM.PA_AMCCode), '') like
(
CASE
WHEN @AMCCode IS NULL THEN '%'
ELSE @AMCCode
END
)
也许您可以删除 case 语句和查询,例如
ISNULL(CONVERT(VARCHAR(10),PM.PA_AMCCode), '') like @AMCCode