標準のTSQLを使用して1つのSQLローに異なるバリエーションの入力をどのようにマッチさせるかを調べたいと思います。私は、SQLの行に次のテキストを持っている複数の入力のバリエーションを1つのSQLローに一致させる
:ここでシナリオがあるI love
私は、この行に一致するものを返す必要がありますすべては、次の3入力を備えています:
"私はLO に完全にM」私達にあなたのすべての愛 StackOverflowの "
" を伝えたい 「
『StackOverflowので VEのI本当に愛 StackOverflowの』
あなたは私がしようとすると、彼らは一致し、なぜあなたにそれをより明確にするために、一致した理由を太字にしている見ることができるように。 I
のI'm
も故意にマッチしていますので、マッチでそれを含めることができれば良いでしょう。
私は、次のTSQLを使用して行われた入力文字列を分割について考えた:
-- Create a space delimited string for testing
declare @str varchar(max)
select @str = 'I want to tell you we all love StackOverflow'
-- XML tag the string by replacing spaces with </x><x> tags
declare @xml xml
select @xml = cast('<x><![CDATA['+ replace(@str,' ',']]></x><x><![CDATA[') + ']]></x>' as xml)
-- Finally select values from nodes <x> and trim at the same time
select ltrim(rtrim(mynode.value('.[1]', 'nvarchar(12)'))) as Code
from (select @xml doc) xx
cross apply doc.nodes('/x') (mynode)
これは私に別の行としてすべての単語を取得しますが、その後、私はこれらを一致させるためのクエリを実行する方法を考え出すことができませんでした。
したがって、この時点からの任意のヘルプや、必要に応じて他の方法でマッチングすることは、非常に高く評価されます。
UPDATE:
@freefallerはRegexルートを私に指摘して、私はさらに前方にビットを取得することができた関数を作成、それゆえ1 @freefaller、しかし、私は今、どのように私ができる知っている必要があります
SELECT * FROM dbo.FindWordsInContext('i love','I want to tell you we all love StackOverflow',30)
SELECT * FROM dbo.FindWordsInContext('i love','I''m totally in love with StackOverflow',30)
SELECT * FROM dbo.FindWordsInContext('i love','I really love StackOverflow',30)
上記
私にマッチした回数を返すとの関係:それはすべて私のテーブルの行ではなく、私は今、次のSELECT文を持っている「私は愛する」のハードコーディングされた入力を見てもらいます文字列が一致しているため、上記の最初の選択は返されます:
Hits Context
1 ...I want to tell you we all love StackOv...
この関数は、この関数ですべての行を検索し、一致する行/行を返す方法を教えていただけますか?
「あなたはウィジェットを愛していますか?」 (単語の順序を逆にします) –
残念ながら一致しない上記の関数を使用すると、これは信じられないほど複雑に思えます:-( – Apqu
私の要件はどの順序であっても最良の結果が得られると思いますが、 *何か*働いています – Apqu