2012-05-08 6 views
1

テーブルから人名を返すクエリを作成しようとしています。TSQL - 1、2または3の部分を持つ名前の検索

テーブルには、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 Jonesと入力すると機能しません。

私は上記のクエリがどこから来たのかをオンラインで検索しました。任意のアイデアやポインターは非常に高く評価されます。事前に

おかげ

デビッド

答えて

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 
+0

お返事ありがとうございますstonetiger。実際にはうまくいきます。ユーザーが実際に入力した行数を制限する方法はありますか?もう一度おねがいします – Clanger67

+0

私の自身の質問に答えている、ANDとORを交換する必要があります。 – Clanger67

関連する問題