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

MariaDB JSON_CONTAINS_PATH () Wyjaśnione

W MariaDB, JSON_CONTAINS_PATH() to wbudowana funkcja, która wskazuje, czy dany dokument JSON zawiera dane w określonej ścieżce lub ścieżkach.

Zwraca 1 jeśli dokument zawiera dane w określonej ścieżce/ach, 0 jeśli nie, i NULL jeśli którykolwiek z argumentów jest NULL .

Składnia

Składnia wygląda tak:

JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)

Gdzie json_doc jest dokumentem JSON i path określa ścieżkę, dla której należy znaleźć dane. Można podać wiele ścieżek.

return_arg argument określa, jak radzić sobie z wieloma ścieżkami. Może być one lub all .

  • one – Funkcja zwraca 1 jeśli w dokumencie JSON istnieje co najmniej jedna ścieżka.
  • all – Funkcja zwraca 1 tylko jeśli wszystkie ścieżki istnieją w dokumencie JSON.

Przykład

Oto przykład do zademonstrowania.

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name');

Wynik:

+-----------------------------------------------------+
| JSON_CONTAINS_PATH(@json_document, 'one', '$.name') |
+-----------------------------------------------------+
|                                                   1 |
+-----------------------------------------------------+

W tym przypadku ścieżka istnieje, a wynikiem jest 1 .

W następnym przykładzie ścieżka nie istnieje, a wynikiem jest 0 :

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type');

Wynik:

+-----------------------------------------------------+
| JSON_CONTAINS_PATH(@json_document, 'one', '$.type') |
+-----------------------------------------------------+
|                                                   0 |
+-----------------------------------------------------+

Wiele ścieżek

Oto kilka przykładów wyszukiwania wielu ścieżek w dokumencie:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.type', 
        '$.weight'
        ) AS Result;

Wynik:

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

W tym przykładzie szukaliśmy dwóch ścieżek. Jedna ścieżka istnieje, a druga nie. Ale mamy 1 w każdym razie (wynik pozytywny). Dzieje się tak, ponieważ użyliśmy one jako drugi argument. one określa, że ​​otrzymamy 1 jeśli istnieje jakakolwiek ze ścieżek.

Oto, co się stanie, jeśli użyjemy all jako drugi argument:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.type', 
    '$.weight'
    ) AS Result;

Wynik:

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

Tym razem wynik to 0 , ponieważ nie wszystkie ścieżki istnieją w dokumencie JSON.

Jeśli zmienimy brakującą ścieżkę ($.type ) na taki, który istnieje, otrzymujemy inny wynik:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.name', 
    '$.weight'
    ) AS Result;

Wynik:

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

Tablice

Oto przykład sprawdzający, czy dany indeks istnieje w tablicy:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[2]'
        ) AS Result;

Wynik:

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

A oto, co się stanie, jeśli zwiększymy indeks do nieistniejącego:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[3]'
        ) AS Result;

Wynik:

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

Struktury zagnieżdżone

Oto przykład, który szuka ścieżki w zagnieżdżonym dokumencie:

SET @json_document = '
    { 
        "name": "Wag", 
        "specs": { 
            "weight": 10, 
            "height": 30 
            } 
    }
';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'one', 
    '$.specs.height'
    ) AS Result;

Wynik:

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

Argumenty zerowe

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

SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT 
    JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
    JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
    JSON_CONTAINS_PATH(@json_document, 'one', null) AS c;

Wynik:

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

Nieprawidłowa liczba parametrów

Brak argumentów skutkuje błędem:

SELECT JSON_CONTAINS_PATH();

Wynik:

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

To samo dzieje się, gdy nie przekazujesz wystarczającej liczby argumentów:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document);

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skuteczne monitorowanie replikacji MySQL za pomocą pulpitów nawigacyjnych SCUMM:część 2

  2. Wiele opóźnionych urządzeń podrzędnych replikacji do odzyskiwania po awarii przy niskim RTO

  3. Radzenie sobie z problemami z replikacją MySQL za pomocą ClusterControl

  4. 4 funkcje, które wyodrębniają mikrosekundy z wartości czasu w MariaDB

  5. Jak LEFT() działa w MariaDB