MariaDB
 sql >> база данни >  >> RDS >> MariaDB

MariaDB JSON_CONTAINS_PATH() Обяснено

В MariaDB, JSON_CONTAINS_PATH() е вградена функция, която показва дали даден JSON документ съдържа данни по посочения път или пътеки.

Връща 1 ако документът съдържа данни в посочения/и път/и, 0 ако не е така, и NULL ако някой от аргументите е NULL .

Синтаксис

Синтаксисът е така:

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

Където json_doc е JSON документът и path определя пътя, по който да се намерят данни. Могат да бъдат предоставени множество пътища.

return_arg аргумент определя как да се работи с множество пътища. Може да бъде one или all .

  • one – Функцията връща 1 ако съществува поне един път в JSON документа.
  • all – Функцията връща 1 само ако всички пътища съществуват в JSON документа.

Пример

Ето пример за демонстрация.

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

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

Резултат:

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

В този случай пътят съществува и резултатът е 1 .

В следващия пример пътят не съществува и резултатът е 0 :

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

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

Резултат:

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

Множество пътища

Ето няколко примера, които търсят множество пътища в документа:

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

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

Резултат:

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

В този пример търсихме два пътя. Единият път съществува, а другият не. Но имаме 1 така или иначе (положителен резултат). Това е така, защото използвахме one като втори аргумент. one указва, че ще получим 1 ако съществува някой от пътищата.

Ето какво се случва, ако използваме all като втори аргумент:

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

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

Резултат:

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

Този път резултатът е 0 , тъй като не всички пътища съществуват в JSON документа.

Ако променим липсващия път ($.type ) спрямо този, който съществува, получаваме различен резултат:

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

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

Резултат:

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

Масиви

Ето пример, който тества дали даден индекс съществува в масив:

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

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

Резултат:

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

И ето какво се случва, ако увеличим индекса до несъществуващ:

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

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

Резултат:

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

Вложени структури

Ето пример, който търси път в рамките на вложен документ:

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

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

Резултат:

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

Нулеви аргументи

Ако някой аргумент е NULL , резултатът е 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;

Резултат:

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

Неправилен брой параметри

Предоставянето на без аргументи води до грешка:

SELECT JSON_CONTAINS_PATH();

Резултат:

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

Същото се случва, когато не предадете достатъчно аргументи:

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

SELECT JSON_CONTAINS_PATH(@json_document);

Резултат:

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. Как LPAD() работи в MariaDB

  2. MariaDB CURRENT_TIME() Обяснено

  3. Как да инсталирате MariaDB на CentOS 8

  4. MariaDB в Токио

  5. Как TO_DAYS() работи в MariaDB