JSON_SEARCH
説明
JSON_SEARCH関数は、JSONドキュメント内で指定された値を検索するために使用されます。値が見つかった場合、その値へのパスを返します。値が見つからなかった場合、NULLを返します。この関数はJSONデータ構造を再帰的に検索することができます。
構文
JSON_SEARCH(<str>, <one_or_all>, <search_value> [, <start_path> [, <escape_char>]])
必須パラメータ
| parameters | described |
|---|---|
<str> | 検索するJSONドキュメント(JSON文字列またはJSONオブジェクト)。 |
<one_or_all> | すべての一致する値を検索するかどうかを指定します。'one'または'all'を指定できます。 |
<search_value> | 検索する値。 |
オプションパラメータ
| parameters | described |
|---|---|
<start_path> | 検索を開始するパスを指定します。指定されない場合、JSONドキュメント全体から検索が開始されます。 |
<escape_char> | パス内の特殊文字をエスケープする文字を指定します。 |
戻り値
- 一致する値が見つかった場合、一致した値を指すJSONパス(文字列)を返します。
- 一致する値が見つからなかった場合、NULLを返します。
使用上の注意
one_or_allパラメータは、すべての一致する値を検索するかどうかを決定します。'one'は最初に一致したパスを返し、'all'はすべての一致するパスを返します。 一致する値が見つからない場合、関数はNULLを返します。 start_pathパラメータは検索範囲を制限でき、クエリをより効率的にします。
例
- 値を検索(one):
SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John');
+-----------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John') |
+-----------------------------------------------+
| $.name |
+-----------------------------------------------+
- 複数の一致する値を検索する(すべて):
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 |
+---------------------------------------------------------------+
- 一致する値が見つかりません:
SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice');
+-----------------------------------------------+
| JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice') |
+-----------------------------------------------+
| NULL |
+-----------------------------------------------+
- 開始検索パスを指定してください:
SELECT JSON_SEARCH('{"person": {"name": "John", "age": 30}}', 'one', 'John', '$.person');
+---------------------------------------------------------------+
| JSON_SEARCH('{"person": {"name": "John", "age": 30}}', 'one', 'John', '$.person') |
+---------------------------------------------------------------+
| $.name |
+---------------------------------------------------------------+