JSON_CONTAINS()

简介

判断给定的val是否包含在目标JSON中,或者包含在指定路径的目标JSON中,TRUE表示存在,FALSE表示不存在

语法

JSON_CONTAINS(json_doc, val, [path])

说明

1. 如果任何参数为NULL,或者在指定的路径下没有JSON数据,就会返回NULL。

2. 如果json_doc参数不是有效的JSON,或者任何路径参数不是有效的路径表达式,或者路径中包含*或**通配符,会发生错误。

3. 当且仅当json_doc的元素与val中的元素具有可比性且相等时,返回TRUE,否则返回FALSE。

4. 当json_doc为数组,且val为数组时,json_doc的元素包含val中的所有元素,才会返回TRUE,否则返回FALSE。

5. 当json_doc为数组,且val为非数组时,json_doc的元素包含val,返回TRUE,否则返回FALSE。

6. 当val为对象时,json_doc中的对象需要和val一一对应,才会返回TRUE,否则返回FALSE。

示例

-- 传入参数为NULL
SELECT JSON_CONTAINS('[1,2,3]',NULL) FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
null                        |
总数目:1

SELECT JSON_CONTAINS(NULL,'[1,2]') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
null                        |
总数目:1

SELECT JSON_CONTAINS('[1,2,3]','[1,2]',NULL) FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
null                        |
总数目:1


-- 指定路径下没有JSON数据
SELECT JSON_CONTAINS('[1,2,3]','[1,2]','$[10]') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
null                        |
总数目:1

SELECT JSON_CONTAINS('{"a":"b","c":"d"}','[1,2]','$.f') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
null                        |
总数目:1


-- json_doc为数组,且val为数组
SELECT JSON_CONTAINS('[1,2,3]','[1,2]') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
true                        |
总数目:1

SELECT JSON_CONTAINS('[1,2,3]','[1,4]') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
false                       |
总数目:1

SELECT JSON_CONTAINS('[1,2,3]','[1,2]','$[1]') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
false                       |
总数目:1


-- json_doc为数组,且val为非数组
SELECT JSON_CONTAINS('[1,2,3]','{"a":"b"}') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
false                       |
总数目:1

SELECT JSON_CONTAINS('[1,{"a":"b"},3]','{"a":"b"}') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
true                        |
总数目:1


-- json_doc为对象,且val为对象
SELECT JSON_CONTAINS('{"a":"b"}','{"a":"b"}') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
true                        |
总数目:1

SELECT JSON_CONTAINS('{"a":"b"}','{"a":"c"}') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
false                       |
总数目:1

SELECT JSON_CONTAINS('{"a":{"a":"b"}}','{"a":"b"}') FROM DUAL;
JSON_CONTAINS(boolean)      |
----------------------------
false                       |
总数目:1