Sql WHERE子句基于VARCHAR列的一部分
我有一个查询,需要在SQL Server中搜索字符串的数字部分 在上面的数字列中,需要在查询中作为变量进行搜索 通配符不起作用: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
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你能解释一下吗??