如何在不使用LIKE的情况下比较SQL中的字符串

时间:2015-10-19 11:47:20

标签: sql sql-server tsql string-matching

我正在使用下面显示的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 .....请帮助

2 个答案:

答案 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