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 | +--------+