JSON_SEARCH
功能描述
从JSON文档中查找给定字符串的路径表达式。
语法格式
JSON_SEARCH( json_doc, one_or_all, search_str[, escape_char[, path]...] )
参数说明
json_doc
:JSON文本,JSON类型或JSON String类型。one_or_all
:匹配出现该值的一个路径还是全部路径,字符类型。search_str
:需要搜索的字符串。字符类型。escape_char
:转义符,字符类型。path
:路径表达式,字符类型。
说明:
- 如果
json_doc
或search_str
或path
为NULL返回NULL。- 对路径存在值的情况,使用新值覆盖原有值,若路径不存在值,则路径与值被忽略。
one_or_all
参数不为'one'
或者'all'
中的一个,则会抛出错误。search_str
可以带%
和_
字符做like运算。escape_char
默认值为\
,必须为一个常数,null、空串或一个字符。- 以下情况将导致系统抛出错误:
-json_doc
是无效的JSON文档。
- 任何path
是无效的路径表达式。
- 路径表达式中包含*
或**
通配符。
函数返回类型
JSON数值类型。
示例
搜索字符串
sql
SQL> SELECT TO_CHAR(JSON_SEARCH('[{"name": "Tim","age": 20,"hobbies": [{ "name": "Car", "weight": 10 },{ "name": "Sports", "weight": 20 }]}
,{"name": "Tom","age": 20,"hobbies": [{ "name": "Reading", "weight": 10 },{ "name": "Sports", "weight": 20 }]}]', 'one', 'Tim'));
EXPR1 |
------------------------------------------------------------------------------
"$[0].name"|
one与all对比
sql
SQL> SELECT
TO_CHAR(JSON_SEARCH('[{"name": "Tim","age": 20,"hobbies": [{ "name": "Car", "weight": 10 },{ "name": "Sports", "weight": 20 }]},
{"name": "Tom","age": 20,"hobbies": [{ "name": "Reading", "weight": 10 },{ "name": "Sports", "weight": 20 }]}]', 'one', 'Sports')),
TO_CHAR(JSON_SEARCH('[{"name": "Tim","age": 20,"hobbies": [{ "name": "Car", "weight": 10 },{ "name": "Sports", "weight": 20 }]},
{"name": "Tom","age": 20,"hobbies": [{ "name": "Reading", "weight": 10 },{ "name": "Sports", "weight": 20 }]}]', 'all', 'Sports'));
EXPR1 | EXPR2 |
------------------------------------------------------------------------------
"$[0].hobbies[1].name"| ["$[0].hobbies[1].name", "$[1].hobbies[1].name"]|
使用通配符
sql
SQL> SELECT TO_CHAR(JSON_SEARCH('[{"name": "Tim","age": 20,"hobbies": [{ "name": "Car", "weight": 10 },{ "name": "Sports", "weight": 20 }]},
{"name": "Tom","age": 20,"hobbies": [{ "name": "Reading", "weight": 10 },{ "name": "Sports", "weight": 20 }]}]', 'all', 'S%'));
EXPR1 |
------------------------------------------------------------------------------
["$[0].hobbies[1].name", "$[1].hobbies[1].name"]|