Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用LIKE的情况下比较SQL中的字符串_Sql_Sql Server_Tsql_String Matching - Fatal编程技术网

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

如何在不使用LIKE的情况下比较SQL中的字符串,sql,sql-server,tsql,string-matching,Sql,Sql Server,Tsql,String Matching,我使用下面显示的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

我使用下面显示的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运算符,当我要搜索AMCcode为1,而不是全部10,11,12….时,该运算符将为AMCcode提供1。。。。。请帮忙

我想你在找这样的东西:

where ',' + cast(PM.PA_AMCCode as varchar(255)) + ',' like '%,' + @AMCCodes + ',%'
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;
这包括比较中的分隔符

请注意,更好的方法是拆分字符串并使用
连接
,如下所示:

where ',' + cast(PM.PA_AMCCode as varchar(255)) + ',' like '%,' + @AMCCodes + ',%'
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

上的索引。我想您正在寻找类似以下内容:

where ',' + cast(PM.PA_AMCCode as varchar(255)) + ',' like '%,' + @AMCCodes + ',%'
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;
这包括比较中的分隔符

请注意,更好的方法是拆分字符串并使用
连接
,如下所示:

where ',' + cast(PM.PA_AMCCode as varchar(255)) + ',' like '%,' + @AMCCodes + ',%'
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

如果要精确匹配该值,则不需要在查询中使用“%”。你可以像下面那样使用

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

请澄清你的问题。如果您需要精确匹配-那么为什么要使用
like
运算符而不是相等?我不是肯定的,但您可能希望查看PATINDEX或CHARINDEX,尽管我相信它们只返回INT,这是模式开始的位置。是的,我需要精确匹配。我使用了“相等”,但它没有显示任何记录。。但是有records@gautamshetty您可以发布您尝试使用相等匹配的查询吗。以及实际代码的示例。如果您包括样本数据和预期结果。帮助解决您的问题要容易得多。请澄清您的问题。如果您需要精确匹配-那么为什么要使用
like
运算符而不是相等?我不是肯定的,但您可能希望查看PATINDEX或CHARINDEX,尽管我相信它们只返回INT,这是模式开始的位置。是的,我需要精确匹配。我使用了“相等”,但它没有显示任何记录。。但是有records@gautamshetty您可以发布您尝试使用相等匹配的查询吗。以及实际代码的示例。如果您包括样本数据和预期结果。帮助解决您的问题要容易得多。