1

テーブルから人物名を返すクエリを作成しようとしています。

テーブルには、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)

これは機能しますが、特定の状況でのみ機能します。

フィールドにJohnJamesJonesという名前が含まれている場合、次のいずれかを入力するとクエリが機能します。

  • ジョン
  • ジェームズ
  • ジョーンズ
  • ジョン・ジェームズ
  • ジェームズ・ジョーンズ
  • ジョン・ジェームズ・ジョーンズ

しかし、ジョン・ジョーンズを入力すると機能しません。

私はオンラインで解決策を探しました。それが上記の質問の出所です。任意のアイデアやポインタをいただければ幸いです。

前もって感謝します

デビッド

4

1 に答える 1

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
于 2012-05-08T20:02:21.233 に答える