sql >> Databáze >  >> RDS >> MariaDB

MariaDB JSON_REPLACE() Vysvětleno

V MariaDB, JSON_REPLACE() je vestavěná funkce, která nahrazuje existující hodnoty v dokumentu JSON a vrací výsledek.

Syntaxe

Syntaxe vypadá takto:

JSON_REPLACE(json_doc, path, val[, path, val] ...)

Příklad

Zde je příklad k demonstraci.

SET @json = '{ "name" : "Wag", "type" : "Cat" }';

SELECT JSON_REPLACE(@json, '$.type', 'Dog');

Výsledek:

+--------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Dog') |
+--------------------------------------+
| {"name": "Wag", "type": "Dog"}       |
+--------------------------------------+

V tomto případě jsem nahradil hodnotu Cat se Dog .

Prvky pole

Chcete-li nahradit prvek pole, zadejte index prvku:

SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';

SELECT JSON_REPLACE(@json, '$.scores[1]', 7);

Výsledek:

+---------------------------------------+
| JSON_REPLACE(@json, '$.scores[1]', 7) |
+---------------------------------------+
| {"name": "Wag", "scores": [8, 7, 9]}  |
+---------------------------------------+

V tomto případě byl druhý prvek pole nahrazen novou hodnotou. Pole jsou založeny na nule, takže $.scores[1] odkazuje na druhý prvek v poli.

Více cest

Syntaxe umožňuje nahrazení hodnot na více cestách jediným voláním JSON_REPLACE() .

Při poskytování více cest se vyhodnocují zleva doprava. To znamená, že výsledek z dřívějšího vyhodnocení se použije jako hodnota pro další.

Nejprve je zde příklad, který nahradí více hodnot v dokumentu na základě jejich klíče:

SET @json = '
    { 
        "name" : "Flutter", 
        "type" : "Bird",
        "weight" : 10
    }
';

SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);

Výsledek:

+------------------------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) |
+------------------------------------------------------+
| {"name": "Flutter", "type": "Bat", "weight": 20}     |
+------------------------------------------------------+

Každá hodnota byla nahrazena podle očekávání.

V dalším příkladu nahradíme více prvků v poli:

SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';

SELECT 
    JSON_REPLACE(
        @json, 
        '$.scores[2]', "a", 
        '$.scores[4]', "b"
    ) AS Result;

Výsledek:

+------------------------------------+
| Result                             |
+------------------------------------+
| {"scores": [0, 1, "a", 3, "b", 5]} |
+------------------------------------+

Nulové argumenty

Pokud json_doc nebo kteroukoli z path arguments je null , výsledkem je NULL . Ale pokud value argument je null , pak je hodnota nahrazena null .

SELECT 
    JSON_REPLACE(null, '$.a', 1) AS a,
    JSON_REPLACE('{"a":1}', null, 1) AS b,
    JSON_REPLACE('{"a":1}', '$.a', null) AS c;

Výsledek:

+------+------+-------------+
| a    | b    | c           |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+

V následujícím příkladu chybí jeden z argumentů cesty v každém volání JSON_REPLACE() . Výsledkem je NULL se vrací pro oba hovory:

SET @json = '{ "name" : "Wag", "type" : "Cat" }';

SELECT 
    JSON_REPLACE(@json, null, 'Bark', '$.type', 'Dog') AS a,
    JSON_REPLACE(@json, '$.name', 'Bark', null, 'Dog') AS b;

Výsledek:

+------+------+
| a    | b    |
+------+------+
| NULL | NULL |
+------+------+

Nesprávný počet parametrů

Volání JSON_REPLACE() bez argumentu vede k chybě:

SELECT JSON_REPLACE();

Výsledek:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'

Je to stejné, když není předán dostatek argumentů:

SELECT JSON_REPLACE('{"a":1}');

Výsledek:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'

Podobné funkce

JSON_INSERT() funkce může vkládat nová data.

JSON_SET() funkce může vkládat nová data a aktualizovat stávající data. Takže JSON_SET() je jako JSON_INSERT() a JSON_REPLACE() v jedné funkci.


  1. Jak získat text SQL ze spouštěče události Postgres

  2. Jak vypsat všechny tabulky v Oracle

  3. 5 zajímavých faktů o systémech správy databází

  4. Porovnání řetězců s rozlišením velkých a malých písmen