2012-04-20 11 views
1

@Descriptionパラメータをストアドプロシージャ(VARCHAR)に渡しています。パラメータはthe bookのようなものです。列にthebookの両方が含まれているレコードを返したいSql Server 2008 - スペースでパラメータを分割し、レコードを返すLIKEすべての分割結果を返します

これらのレコードは返します:

  • the green book
  • the huge orange book

私はスペースで@Descriptionパラメータを分割する分割機能を持っていますが、私はどのようにこれを含めるには考えていますwhere句... NULLの場合は、@Descriptionパラメータも無視する必要があります。

免責事項:これまでに尋ねられたことがお詫び申し上げます...私は をしばらく検索して何も見つかりませんでした。あなたのパラメータにすべての単語を持って結果を持っているしたい場合、あなたはこのような何か行うことができますまあ

+0

をあなたは句読点を考慮する必要があり、または部分一致のですか? ''%%%book% ''はあなたの例と一致しますが、例えば' 'theology book' 'も一致します。他の可能な解決法は ''本、 '' *(弱い例ですが、私が考えることができる最高のもの)*と一致しないかもしれません。あなたは何が見つかる必要があるのか​​、何が見いだされるべきではないかについて精緻に説明できますか? – MatBailie

+0

「@ Description」のすべての単語に一致するレコードを見つける必要があります。つまり、「本」と「本」と「aatheaa aabookaa」です。それらはすべて戻るでしょう。 – Martin

+0

'%%%book%'は私をもっと近づけますが、返されない 'book the'と一致する必要があります。 – Martin

答えて

2

、:

SELECT A.YourFields 
FROM YourTable A 
INNER JOIN (SELECT *, COUNT(*) OVER() Total FROM dbo.Split(@Description)) B 
ON A.YourField LIKE '%' + B.Data + '%' 
GROUP BY A.YourFields 
HAVING COUNT(*) = MAX(B.Total) 
+0

'LIKE '%' + B.Data + '%''を使用していて、部分一致、句読点などを考慮していないので、これは実際には%LIKE '%the%book%' 'と非常によく似ています。同じ結果、より多くのコードとより多くのCPU時間。 – MatBailie

+0

私はこれを試しました...問題は '@ Description'がnullのときです。そして、私の質問の一つにも別の理由でグループがあるので、それはうまくいきません。 – Martin

+1

@Martin - 質問に対するあなたのコメントに基づいて、これはおそらくあなたの答えです。しかし、それをサブクエリに入れてください。 'SELECT * FROM yourQuery INNER JOIN(LamaksQuery)books with books.id = yourTable.idどこにいても – MatBailie

関連する問題