JSON_CONTAINS() în MySQL

Verifică dacă un document JSON conține o anumită valoare sau un sub-document.

Sintaxă
JSON_CONTAINS(document, candidat[, cale])

Ce face JSON_CONTAINS()

JSON_CONTAINS() returnează 1 dacă valoarea candidat se găsește în document (sau la calea dată). Candidatul trebuie scris tot ca JSON: un text se scrie '"înot"', cu ghilimele.

Parametri

Parametru Descriere
document Documentul în care se caută.
candidat Valoarea JSON căutată.
cale Opțional. Unde se caută.

Ce returnează

1, 0 sau NULL.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE profiluri (
  id INT PRIMARY KEY,
  date JSON
);

INSERT INTO profiluri VALUES
  (1, '{"nume": "Ana", "oras": "Iași", "varsta": 31, "hobby": ["citit", "înot"], "adresa": {"strada": "Lăpușneanu", "nr": 12}}'),
  (2, '{"nume": "Dan", "oras": "Cluj", "varsta": 45, "hobby": ["ciclism"]}'),
  (3, '{"nume": "Ioana", "oras": "Iași", "varsta": 27, "hobby": []}');

Exemplul 1: Cine are hobby-ul „înot”

SELECT date->>'$.nume' AS nume
FROM profiluri
WHERE JSON_CONTAINS(date, '"înot"', '$.hobby');

Rezultat

+------+
| nume |
+------+
| Ana  |
+------+

Greșeli frecvente

  • Scrii candidatul fără ghilimele JSON: JSON_CONTAINS(date, 'înot', ...). Nu este JSON valid și primești eroare.

Comenzi înrudite

  • MEMBER OF(): Verifică dacă o valoare se află într-o listă JSON; poate folosi indexuri multi-valoare.
  • JSON_OVERLAPS(): Verifică dacă două documente JSON au măcar un element sau o pereche cheie-valoare în comun.
  • JSON_SEARCH(): Caută un text în valorile unui document JSON și returnează calea (sau căile) unde apare.