sql >> Database >  >> RDS >> Mysql

JSON_CONTAINS() Voorbeelden in MySQL

In MySQL is de JSON_CONTAINS() functie test of een opgegeven waarde al dan niet wordt gevonden in het gegeven JSON-document of, optioneel, op het opgegeven pad in het document.

Als de waarde wordt gevonden, JSON_CONTAINS() retourneert 1 , anders retourneert het 0 .

Syntaxis

De syntaxis gaat als volgt:

JSON_CONTAINS(target, candidate[, path])

De functie retourneert 1 of 0 afhankelijk van of een bepaalde candidate JSON-document is opgenomen in een target JSON-document, of—als een path argument is opgegeven:of de kandidaat op een specifiek pad binnen het doel wordt gevonden.

Voorbeeld 1 – Twee argumenten

Hier is een voorbeeld om het basisgebruik te demonstreren zonder een pad op te geven (d.w.z. door slechts twee argumenten op te geven).

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

Resultaat:

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

Let op de accolades rond het tweede argument. Deze zijn vereist om het een geldige JSON te maken. Als we de accolades weglaten, krijgen we een foutmelding:

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

Resultaat:

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.

Voorbeeld 2 – Drie argumenten

In dit voorbeeld voeg ik een derde argument toe om een ​​specifiek pad aan te geven waarnaar het tweede argument in het eerste argument moet worden gevonden.

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

Resultaat:

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

In dit geval werd het tweede argument gevonden in het eerste argument op het pad gespecificeerd door het derde argument.

Als het niet werd gevonden, zouden we eindigen met dit:

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

Resultaat:

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

Voorbeeld 3 – Puntnotatie

U kunt puntnotatie gebruiken om specifieke paden in het JSON-document aan te geven.

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

Resultaat:

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

  1. Hoe kan ik een dynamische WHERE-clausule maken?

  2. Overwegingen met betrekking tot gegevensintegriteit en prestatie in semisynchrone MySQL-replicatie

  3. Waarom zou ik int gebruiken in plaats van een byte of short in C#

  4. Replicatieoplossingen van Oracle en MySQL vergelijken