TSQL - 搜索可以包含1,2或3个部分的名称

时间:2012-05-08 14:56:41

标签: tsql

我正在尝试创建一个将从表中返回人名的查询。

该表包含一个名为full_name的字段。

我在该字段的表格上创建了​​一个全文索引。

我有以下查询

ALTER procedure [dbo].[spGetContactFromContactName]
@contactname VARCHAR(200) 
AS
DECLARE @searchstr VARCHAR(200)
set @searchstr = '"'+REPLACE(@contactname,',','*" OR ''')+'*"'
select * from tbl_ContactDetails
where contains(Full_Name,@searchstr)

这有效,但仅限于某些情况。

如果该字段包含名称 John James Jones ,则在您输入以下任何内容时,该查询将起作用:

  • 约翰
  • 詹姆斯
  • 琼斯
  • John James
  • James Jones
  • John James Jones

但如果您输入 John Jones ,则无效。

我在线搜索了一个解决方案,这是上述查询的来源。任何想法或指示都将非常感激。

提前致谢

大卫

1 个答案:

答案 0 :(得分:2)

试试这个。您的原始程序不能正确处理空间。

ALTER PROCEDURE [dbo].[spGetContactFromContactName]
   @contactname VARCHAR(200)
AS 
BEGIN
   DECLARE @searchstr VARCHAR(200)
   SET @contactname = REPLACE(REPLACE(@contactname, ',', '|'), ' ', '|')
   SET @searchstr = '"' + REPLACE(@contactname, '|', '*" OR "') + '*"'
   SELECT   *
   FROM     tbl_ContactDetails
   WHERE    CONTAINS ( Full_Name, @searchstr )
END