JSON_SEARCH
更新时间:2025-10-16
描述
JSON_SEARCH 函数用于在 JSON 文档中查找指定的值。如果找到该值,则返回值的路径。如果没有找到该值,则返回 NULL。该函数可以在 JSON 数据结构中递归查找。
语法
SQL
1JSON_SEARCH(<str>, <one_or_all>, <search_value> [, <start_path> [, <escape_char>]])
必选参数
| 参数 | 描述 |
|---|---|
<str> |
需要搜索的 JSON 文档(可以是 JSON 字符串或 JSON 对象)。 |
<one_or_all> |
指定是否查找所有匹配的值。可以取值 'one' 或 'all'。 |
<search_value> |
需要查找的值,搜索目标。 |
可选参数
| 参数 | 描述 |
|---|---|
<start_path> |
指定开始搜索的路径。如果没有提供,则从整个 JSON 文档开始搜索。 |
<escape_char> |
指定用于转义路径中的特殊字符。 |
返回值
如果找到匹配的值,返回一个 JSON 路径(字符串类型),指向匹配的值。 如果没有找到匹配的值,返回 NULL。
注意事项
one_or_all 参数决定了是否查找所有匹配的值。'one' 会返回第一个匹配的路径,'all' 会返回所有匹配的路径。
如果没有找到匹配值,函数会返回 NULL。
使用 start_path 参数可以限制搜索的范围,使得查询更加高效。
示例
- 查找一个值(one):
SQL
1SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John');
SQL
1+-----------------------------------------------+
2| JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'John') |
3+-----------------------------------------------+
4| $.name |
5+-----------------------------------------------+
- 查找多个匹配值(all):
SQL
1SELECT JSON_SEARCH('{"person": {"name": "John", "age": 30}, "name": "John"}', 'all', 'John');
SQL
1+---------------------------------------------------------------+
2| JSON_SEARCH('{"person": {"name": "John", "age": 30}, "name": "John"}', 'all', 'John') |
3+---------------------------------------------------------------+
4| $.name |
5| $.person.name |
6+---------------------------------------------------------------+
- 没有找到匹配值:
SQL
1SELECT JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice');
SQL
1+-----------------------------------------------+
2| JSON_SEARCH('{"name": "John", "age": 30}', 'one', 'Alice') |
3+-----------------------------------------------+
4| NULL |
5+-----------------------------------------------+
- 指定搜索起始路径:
SQL
1SELECT JSON_SEARCH('{"person": {"name": "John", "age": 30}}', 'one', 'John', '$.person');
SQL
1+---------------------------------------------------------------+
2| JSON_SEARCH('{"person": {"name": "John", "age": 30}}', 'one', 'John', '$.person') |
3+---------------------------------------------------------------+
4| $.name |
5+---------------------------------------------------------------+
