Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Exemplos de JSON_CONTAINS() no MySQL


No MySQL, o JSON_CONTAINS() A função testa se um valor especificado é encontrado ou não no documento JSON fornecido ou, opcionalmente, no caminho especificado dentro do documento.

Se o valor for encontrado, JSON_CONTAINS() retorna 1 , caso contrário, ele retornará 0 .


Sintaxe


A sintaxe fica assim:
JSON_CONTAINS(target, candidate[, path])

A função retorna 1 ou 0 dependendo se um determinado candidate O documento JSON está contido em um target Documento JSON, ou—se um path argumento foi fornecido - se o candidato é encontrado em um caminho específico dentro do destino.

Exemplo 1 – Dois argumentos


Aqui está um exemplo para demonstrar o uso básico sem especificar um caminho (ou seja, fornecer apenas dois 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 |
+--------+

Observe as chaves ao redor do segundo argumento. Eles são necessários para torná-lo um JSON válido. Se omitirmos as chaves, terminaremos com um erro:
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.

Exemplo 2 – Três Argumentos


Neste exemplo eu adiciono um terceiro argumento, para indicar um caminho específico para o qual encontrar o segundo argumento no primeiro argumento.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '1';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;

Resultado:
+--------+
| Result |
+--------+
|      1 |
+--------+

Nesse caso, o segundo argumento foi encontrado no primeiro argumento no caminho especificado pelo terceiro argumento.

Se não fosse encontrado, terminaríamos com isso:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '2';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;

Resultado:
+--------+
| Result |
+--------+
|      0 |
+--------+

Exemplo 3 – Notação de Ponto


Você pode usar a notação de ponto para indicar caminhos específicos no 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 |
+--------+