1. ホーム
  2. sql

[解決済み] SQL Server XML Datatype の LIKE ステートメントを使用する。

2023-01-01 10:41:31

質問

varcharフィールドがある場合、以下のようなことが簡単にできます。 SELECT * FROM TABLE WHERE ColumnA LIKE '%Test%' を実行して、そのカラムが特定の文字列を含んでいるかどうかを確認することができます。

XML Typeの場合はどうするのでしょうか?

私は'Text'ノードを持つ行だけを返す次のようなものを持っていますが、私はそのノード内で検索する必要があります。

select * from WebPageContent where data.exist('/PageContent/Text') = 1

どのように解決するのですか?

非常に簡単にできるはずです。

SELECT * 
FROM WebPageContent 
WHERE data.value('(/PageContent/Text)[1]', 'varchar(100)') LIKE 'XYZ%'

.value メソッドは実際の値を与え、それを VARCHAR() として返すように定義し、LIKE 文でチェックすることができます。

注意してほしいのは、これはものすごく速いというわけではないということです。もし、XMLに特定のフィールドがあり、それを何度も検査する必要がある場合は、そうすることができます。

  • XML を取得し、探している値を VARCHAR() として返すストアド関数を作成する。
  • この関数を呼び出す新しい計算フィールドをテーブルに定義し、それをPERSISTEDカラムにします。

これにより、基本的にXMLの特定の部分を計算されたフィールドに抽出し、それをパーシステッドにすることで、そのフィールドで非常に効率的に検索することができます(なんと、そのフィールドをINDEXすることさえできるのです!)。

マーク