Mysql
 sql >> Database >  >> RDS >> Mysql

JSON_CONTAINS() Esempi in MySQL

In MySQL, il JSON_CONTAINS() la funzione verifica se un valore specificato viene trovato o meno nel documento JSON specificato o, facoltativamente, nel percorso specificato all'interno del documento.

Se viene trovato il valore, JSON_CONTAINS() restituisce 1 , altrimenti restituisce 0 .

Sintassi

La sintassi è questa:

JSON_CONTAINS(target, candidate[, path])

La funzione restituisce 1 o 0 a seconda che un dato candidate Il documento JSON è contenuto all'interno di un target documento JSON o, se un path argomento è stato fornito, se il candidato si trova in un percorso specifico all'interno della destinazione.

Esempio 1 – Due argomenti

Ecco un esempio per dimostrare l'utilizzo di base senza specificare un percorso (ovvero fornendo solo due argomenti).

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

Risultato:

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

Nota le parentesi graffe attorno al secondo argomento. Questi sono necessari per renderlo JSON valido. Se omettiamo le parentesi graffe, finiremo con un errore:

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

Risultato:

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.

Esempio 2 – Tre argomenti

In questo esempio aggiungo un terzo argomento, per indicare un percorso specifico per il quale trovare il secondo argomento nel primo argomento.

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

Risultato:

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

In questo caso, il secondo argomento è stato trovato nel primo argomento nel percorso specificato dal terzo argomento.

Se non fosse stato trovato, ci ritroveremmo con questo:

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

Risultato:

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

Esempio 3 – Notazione del punto

Puoi utilizzare la notazione a punti per indicare percorsi specifici all'interno del documento JSON.

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

Risultato:

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