Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
Sql WHERE子句基于VARCHAR列的一部分_Sql_Sql Server - Fatal编程技术网

Sql WHERE子句基于VARCHAR列的一部分

Sql WHERE子句基于VARCHAR列的一部分,sql,sql-server,Sql,Sql Server,我有一个查询,需要在SQL Server中搜索字符串的数字部分 在上面的数字列中,需要在查询中作为变量进行搜索 通配符不起作用: SELECT PK_Story FROM Story WHERE ProductId = @productParam AND Number LIKE '%' + @numberParam + '%'; 因为这也会返回132和232 那么如何在“-”之后搜索特定的数字呢。正如您所看到的,由于前缀长度可变,我不能使用charindex 您可以使用substr

我有一个查询,需要在SQL Server中搜索字符串的数字部分

在上面的数字列中,需要在查询中作为变量进行搜索

通配符不起作用:

SELECT PK_Story 
FROM Story 
WHERE ProductId = @productParam 
  AND Number LIKE '%' + @numberParam + '%';
因为这也会返回132和232


那么如何在“-”之后搜索特定的数字呢。正如您所看到的,由于前缀长度可变,我不能使用charindex

您可以使用
substring
charindex
组合来获得结果

SELECT PK_Story 
FROM Story
WHERE ProductId = @productParam 
AND @numberParam like 
'%' + case when charindex('-', Number) > 0 
           then substring(Number, charindex('-', Number) +1, len(Number)) + '%'
      else Number 
      end + '%'

像“%-”+@numberParam这样的
呢?

这个呢

declare @My_Number as varchar(50)='8'

SELECT PK_Story 
FROM Story
WHERE ProductId = @productParam 
AND substring(Number, charindex('-', Number) +1, len(Number)) like 
@My_Number +'%'
或者,如果你想要平等的话

SELECT PK_Story 
    FROM Story
    WHERE ProductId = @productParam 
    AND substring(Number, charindex('-', Number) +1, len(Number)) =
    @My_Numbe

这仍然会返回多个32的条目。它还会拉入132您要传递的
@numberParam
是什么?你期望结果如何?您可能需要删除前导或尾随的
%
,因此您必须在列上而不是在参数上创建子字符串
子字符串(number,charindex('-',number)+1,len(@numberParam))=@numberParam
可能会删除最后一个百分比,这样就不会返回MISCX-321?当您发现自己需要这样做时,它会指向一个设计问题。具体来说,您将两条信息(即产品名称和id)塞入一列。将它们分开,或者创建一个计算列,或者在搜索时使用多个谓词(例如,
其中ProductName='MISCX'和ID=212'
),您所说的重复答案是什么意思@MajidKalkatechi你能解释一下吗??