sql >> Base de Datos >  >> RDS >> Mysql

Ejemplos de JSON_CONTAINS() en MySQL

En MySQL, JSON_CONTAINS() La función prueba si se encuentra o no un valor específico en el documento JSON dado o, opcionalmente, en la ruta especificada dentro del documento.

Si se encuentra el valor, JSON_CONTAINS() devuelve 1 , de lo contrario devuelve 0 .

Sintaxis

La sintaxis es así:

JSON_CONTAINS(target, candidate[, path])

La función devuelve 1 o 0 dependiendo de si un candidate dado El documento JSON está contenido dentro de un target documento JSON o, si es una path se proporcionó el argumento, si el candidato se encuentra en una ruta específica dentro del objetivo.

Ejemplo 1:dos argumentos

Aquí hay un ejemplo para demostrar el uso básico sin especificar una ruta (es decir, proporcionar solo dos argumentos).

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '{"c": {"d": 3}}';
SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;

Resultado:

+--------+
| Result |
+--------+
|      1 |
+--------+

Tenga en cuenta las llaves alrededor del segundo argumento. Estos son necesarios para que sea JSON válido. Si omitimos las llaves, terminaremos con un error:

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '"c": {"d": 3}';
SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;

Resultado:

ERROR 3141 (22032): Invalid JSON text in argument 2 to function json_contains: "The document root must not be followed by other values." at position 3.

Ejemplo 2:tres argumentos

En este ejemplo, agrego un tercer argumento para indicar una ruta específica para encontrar el segundo argumento en el primer argumento.

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '1';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      1 |
+--------+

En este caso, el segundo argumento se encontró en el primer argumento en la ruta especificada por el tercer argumento.

Si no se encontrara, terminaríamos con esto:

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '2';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      0 |
+--------+

Ejemplo 3:notación de puntos

Puede usar la notación de puntos para indicar rutas específicas dentro del documento JSON.

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '3';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;

Resultado:

+--------+
| Result |
+--------+
|      1 |
+--------+