sql >> Databáze >  >> RDS >> Mysql

Příklady JSON_CONTAINS() v MySQL

V MySQL je to JSON_CONTAINS() function testuje, zda je zadaná hodnota nalezena v daném dokumentu JSON nebo volitelně na zadané cestě v dokumentu.

Pokud je hodnota nalezena, JSON_CONTAINS() vrátí 1 , jinak vrátí 0 .

Syntaxe

Syntaxe vypadá takto:

JSON_CONTAINS(target, candidate[, path])

Funkce vrátí 1 nebo 0 podle toho, zda daný candidate Dokument JSON je obsažen v target Dokument JSON nebo – pokud path argument byl dodán – zda ​​je kandidát nalezen na konkrétní cestě v rámci cíle.

Příklad 1 – Dva argumenty

Zde je příklad demonstrující základní použití bez zadání cesty (tj. poskytnutí pouze dvou argumentů).

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

Výsledek:

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

Všimněte si složených závorek kolem druhého argumentu. Ty jsou vyžadovány, aby byl JSON platný. Pokud vynecháme složené závorky, skončíme s chybou:

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

Výsledek:

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.

Příklad 2 – Tři argumenty

V tomto příkladu přidám třetí argument, abych označil konkrétní cestu, pro kterou se má najít druhý argument v prvním argumentu.

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

Výsledek:

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

V tomto případě byl druhý argument nalezen v prvním argumentu na cestě určené třetím argumentem.

Pokud by nebyl nalezen, skončili bychom s tímto:

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

Výsledek:

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

Příklad 3 – Tečkový zápis

K označení konkrétních cest v dokumentu JSON můžete použít tečkovou notaci.

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

Výsledek:

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

  1. Nejrychlejší způsob importu velkého souboru CSV do MySql pomocí MySql CLI

  2. Jaký je ekvivalent dotazu MySQL k PHP strip_tags?

  3. Jak změnit styl data v PostgreSQL?

  4. Cizí klíč k jedné z mnoha tabulek?