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

JSON_CONTAINS() Eksempler i MySQL

I MySQL er JSON_CONTAINS() funktion tester, om der findes en specificeret værdi i det givne JSON-dokument eller, valgfrit, ved den angivne sti i dokumentet.

Hvis værdien findes, JSON_CONTAINS() returnerer 1 , ellers returnerer den 0 .

Syntaks

Syntaksen ser sådan ud:

JSON_CONTAINS(target, candidate[, path])

Funktionen returnerer 1 eller 0 afhængig af om en given candidate JSON-dokument er indeholdt i et target JSON-dokument, eller - hvis en path argument blev leveret - om kandidaten er fundet på en specifik vej inden for målet.

Eksempel 1 – To argumenter

Her er et eksempel til at demonstrere grundlæggende brug uden at angive en sti (dvs. kun at give to argumenter).

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

Resultat:

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

Bemærk de krøllede parenteser omkring det andet argument. Disse er nødvendige for at gøre det gyldigt JSON. Hvis vi udelader de krøllede seler, ender vi med en fejl:

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

Resultat:

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.

Eksempel 2 – Tre argumenter

I dette eksempel tilføjer jeg et tredje argument for at angive en specifik sti, som det andet argument skal findes i det første argument for.

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

Resultat:

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

I dette tilfælde blev det andet argument fundet i det første argument på stien angivet af det tredje argument.

Hvis det ikke blev fundet, ville vi ende med dette:

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

Resultat:

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

Eksempel 3 – Punktnotation

Du kan bruge punktnotation til at angive specifikke stier i JSON-dokumentet.

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

Resultat:

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

  1. Hent navnet på en rækkes kildetabel, når du forespørger på den forælder, den arver fra

  2. Returner nul, hvis der ikke findes nogen post

  3. Er der en Oracle SQL-forespørgsel, der samler flere rækker i én række?

  4. Postgres tips og tricks