メインコンテンツまでスキップ
バージョン: 2.1

JSON_SEARCH

説明

JSON_SEARCH関数は、JSONドキュメント内で指定された値を検索するために使用されます。値が見つかった場合、その値へのパスを返します。値が見つからない場合は、NULLを返します。この関数は、JSONデータ構造を再帰的に検索することができます。

構文

JSON_SEARCH(<str>, <one_or_all>, <search_value> [, <start_path> [, <escape_char>]])

必須パラメータ

parametersdescribed
<str>検索対象のJSONドキュメント(JSON文字列またはJSONオブジェクト)。
<one_or_all>マッチするすべての値を検索するかどうかを指定します。'one'または'all'を指定できます。
<search_value>検索する値。

オプションパラメータ

parametersdescribed
<start_path>検索を開始するパスを指定します。指定されない場合、JSONドキュメント全体から検索を開始します。
<escape_char>パス内の特殊文字をエスケープする文字を指定します。

戻り値

  • マッチする値が見つかった場合、マッチした値を指すJSONパス(文字列)を返します。
  • マッチする値が見つからなかった場合、NULLを返します。

使用上の注意

one_or_allパラメータは、マッチするすべての値を検索するかどうかを決定します。'one'は最初にマッチしたパスを返し、'all'はマッチするすべてのパスを返します。 マッチする値が見つからない場合、関数はNULLを返します。 start_pathパラメータは検索範囲を制限でき、クエリをより効率的にします。

  1. 値を検索する(one):
SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John');

+-----------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John') |
+-----------------------------------------------+
| $.name |
+-----------------------------------------------+

  1. 複数の一致する値をすべて検索する:
SELECT JSON_SEARCH('{"person": {"name": "John", "age": 30}, "name": "John"}', 'all', 'John');


+---------------------------------------------------------------+
| JSON_SEARCH('{"person": {"name": "John", "age": 30}, "name": "John"}', 'all', 'John') |
+---------------------------------------------------------------+
| $.name |
| $.person.name |
+---------------------------------------------------------------+
  1. 一致する値が見つかりません:
SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice');

+-----------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice') |
+-----------------------------------------------+
| NULL |
+-----------------------------------------------+

  1. 開始検索パスを指定します:
SELECT JSON_SEARCH('{"person": {"name": "John", "age": 30}}', 'one', 'John', '$.person');

+---------------------------------------------------------------+
| JSON_SEARCH('{"person": {"name": "John", "age": 30}}', 'one', 'John', '$.person') |
+---------------------------------------------------------------+
| $.name |
+---------------------------------------------------------------+