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

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 |
+---------------------------------------------------------------+