MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

MariaDB JSON_REMOVE() Objaśnienie

W MariaDB, JSON_REMOVE() to wbudowana funkcja, która usuwa dane z dokumentu JSON i zwraca wynik.

Składnia

Składnia wygląda tak:

JSON_REMOVE(json_doc, path[, path] ...)

Przykład

Oto przykład do zademonstrowania.

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

SELECT JSON_REMOVE(@json, '$.type');

Wynik:

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

W tym przypadku usunęliśmy element danych type z dokumentu. Innymi słowy, type klucz i jego wartość zostały usunięte.

Tablice

JSON_REMOVE() może być użyty do usunięcia całej tablicy lub określonych elementów w tablicy.

Aby usunąć całą tablicę, po prostu użyj nazwy klucza:

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

SELECT JSON_REMOVE(@json, '$.scores');

Wynik:

+--------------------------------+
| JSON_REMOVE(@json, '$.scores') |
+--------------------------------+
| {"name": "Wag"}                |
+--------------------------------+

To usunęło całą tablicę z dokumentu.

Aby usunąć element tablicy, określ indeks elementu. Oto przykład usuwania elementu tablicy z tablicy:

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

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

Wynik:

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

W tym przypadku drugi element tablicy został usunięty. Tablice są oparte na zerach, więc $.scores[1] odnosi się do drugiego elementu w tablicy.

Zobacz poniżej, jak JSON_REMOVE() zajmuje się usuwaniem wielu ścieżek w tablicy.

Wiele ścieżek

Gdy podajesz wiele ścieżek, są one oceniane od lewej do prawej. Oznacza to, że wynik z wcześniejszej oceny jest używany jako wartość dla następnej.

Warto zwrócić na to szczególną uwagę podczas usuwania elementów z tablicy na podstawie ich indeksu.

Po pierwsze, oto przykład, który usuwa wiele ścieżek z dokumentu na podstawie ich klucza:

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Dog",
        "weight" : 10
    }
';

SELECT JSON_REMOVE(@json, '$.type', '$.weight');

Wynik:

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

Każda para klucz/wartość została usunięta zgodnie z oczekiwaniami.

W następnym przykładzie nie usuwamy pary klucz/wartość. Zamiast tego usuwamy wiele elementów z tablicy:

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

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

Wynik:

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

W tym przypadku wywołaliśmy JSON_REMOVE() dwa razy. Oba określają ten sam indeks tablicy do usunięcia (2 i 4 ), ale zamieniamy argumenty w drugim wywołaniu. W pierwszym przykładzie jest to 2 następnie 4 (w tej kolejności). W drugim przykładzie jest to 4 następnie 2 .

Dało to inny wynik dla każdego połączenia. Jak wspomniano, wiele ścieżek jest ocenianych od lewej do prawej, więc kolejność może wpływać na wynik.

Oto kolejny przykład ilustrujący, w jaki sposób wynik może być zupełnie inny, w zależności od tego, ile ścieżek jest określonych, które z nich i w jakiej kolejności:

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

SELECT 
    JSON_REMOVE(@json, '$.scores[0]', '$.scores[1]', '$.scores[5]') AS a,
    JSON_REMOVE(@json, '$.scores[1]', '$.scores[5]', '$.scores[0]') AS b,
    JSON_REMOVE(@json, '$.scores[5]', '$.scores[0]', '$.scores[1]') AS c,
    JSON_REMOVE(@json, '$.scores[5]', '$.scores[1]', '$.scores[0]') AS d,
    JSON_REMOVE(@json, '$.scores[1]', '$.scores[0]', '$.scores[5]') AS e,
    JSON_REMOVE(@json, '$.scores[0]', '$.scores[5]', '$.scores[1]') AS f;

Wynik (przy użyciu wyjścia pionowego):

a: {"scores": [1, 3, 4, 5]}
b: {"scores": [2, 3, 4, 5]}
c: {"scores": [1, 3, 4]}
d: {"scores": [2, 3, 4]}
e: {"scores": [2, 3, 4, 5]}
f: {"scores": [1, 3, 4, 5]}

Argumenty zerowe

Jeśli jakikolwiek argument ma wartość NULL , wynik to NULL :

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

Wynik:

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

Nieprawidłowa liczba parametrów

Wywołanie JSON_REMOVE() bez argumentu powoduje błąd:

SELECT JSON_REMOVE();

Wynik:

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

Tak samo jest, gdy nie przekazano wystarczającej liczby argumentów:

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

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak skonfigurować replikację asynchroniczną między klastrami MySQL Galera

  2. Zapoznanie się z możliwościami i funkcjami MariaDB SkySQL

  3. Jak monitorować kontenery MySQL za pomocą Prometheusa — wdrożenie w trybie Standalone i Swarm::Część pierwsza

  4. Jak działa funkcja CONCAT() w MariaDB

  5. 8 sposobów na dodawanie dni do daty w MariaDB