通过Wild Card过滤记录

时间:2016-02-04 10:49:49

标签: sql-server where wildcard sql-like

我有一个非常简单的存储过程,使用Wild Card过滤行我的问题是为什么Wild卡不会返回特定的行?

例如,我有以下条目:

ID  Name           Price
1   rose pink      20
2   dark rose      63 
3   rose pink New  40
4   black Velvet   30  

如果我说

select * from Product where Name like '%rose%'

它将返回前三行。细

但是当我说

select * from Product where Name like '%rose pink%'

它必须仅返回第一行,但wild card的作用是,它也返回第三行。所以我的问题是,如果像sp那样使用通用术语,如何使rose能够返回所有行。同时我希望我的sp仅返回名称与传递的参数完全匹配的行

修改 这是商店程序:

create procedure [dbo].[usp_Get_Products]                                 
@rvcName varchar(50),                                                                
as                                
begin  
   select * from Product where Name Like '%'+ @rvcName +'%'   
end 

2 个答案:

答案 0 :(得分:0)

也许是这样的

IF EXISTS (
           SELECT 1
           FROM Product
           WHERE Name = @rvcName
           )

SELECT *
FROM Product
WHERE Name = @rvcName

ELSE 

SELECT *
FROM Product
WHERE Name LIKE '%'+ @rvcName +'%'

答案 1 :(得分:0)

  

所以我的问题是,如何使sp能够返回所有行if   像rose一样使用通用术语。同时我想要我的sp   仅返回名称与传递完全匹配的行   参数

答案是您必须指示您的sp使用Like=。 当您使用Like时,通常会搜索以您提供的文本开头,结尾或包含该文字的内容。

因此,您的选项(例如,搜索rose)是:

  1. 找到与玫瑰name = 'rose'name like 'rose'
  2. 匹配的所有行
  3. 查找以rose name like 'rose%'
  4. 开头的所有行
  5. 查找包含rose name like '%rose%'
  6. 的所有行
  7. 查找以rose name like '%rose'
  8. 结尾的所有行

    无法以“通用”形式组合1和3。

    最后的想法:

    请考虑使用Full Text代替Like