全文検索とは思えない あなたを助けるでしょう。 /1/
のような専門用語など、フラグメントを探しているようです .
XML でこれを試してください
DECLARE @SearchFor VARCHAR(100)='1';
SELECT *
FROM SettingsData
WHERE xmldata.exist(N'//*[contains(text()[1],sql:variable("@SearchFor"))]')=1;
任意のノードの内部 text()
をチェックします 検索フレーズが含まれている場合。ただし、1
の任意の値 内部が見つかりました (たとえば、1
を持つ無関係な番号 text()="1"
を検索するとよいでしょう。 contains
を実行します 文字列の長さが特定の最小値を超えた場合のみ。
のようなもの
WHERE xmldata.exist(N'//*[text()[1]=sql:variable("@SearchFor") or(string-length(text()[1])>=3 and contains(text()[1],concat("/",sql:variable("@SearchFor"),"/")))]')=1;
Json は - 今のところ - 文字列にすぎず、解析する必要があります。 v2016 では Microsoft が JSON サポートを導入しましたが、あなたは v2012 を使用しています。 LIKE
の問題 JSON 文字列を検索すると、要素の名前の一部として 1 が見つかる可能性があります。残りは上記のとおりです...
SELECT *
FROM SettingsData
WHERE jsondata LIKE '%' + @SearchFor + '%';