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

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

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

Той приема документа JSON като аргумент и връща 1 ако пътят е намерен, и 0 ако не е.

Документацията на MariaDB посочва, че функцията „определя дали в дадените данни съществува определена стойност на JSON“. Изглежда обаче, че функцията всъщност не проверява за дадена стойност. Вероятно е по-точно да се каже, че определя дали е определен път съществува или че на посочения път съществува стойност.

За проверка дали действителната стойност съществува, можете да използвате JSON_CONTAINS() функция.

Синтаксис

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

JSON_EXISTS(json_doc, path) 

Където json_doc е JSON документът и path е пътят за намиране.

Пример

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

SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name'); 

Резултат:

+----------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.name') |+---------------------------- ----------------+| 1 |+----------------------------------------------+ 

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

Ако пътят не е намерен, резултатът е 0 , като това:

SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type'); 

Резултат:

+----------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.type') |+---------------------------- ----------------+| 0 |+----------------------------------------------+ 

Масиви

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

SELECT JSON_EXISTS(
    '{ 
        "name": "Wag", 
        "scores": [ 10, 8, 7 ] 
    }', 
    "$.scores[2]"
    ) AS Result; 

Резултат:

+--------+| Резултат |+--------+| 1 |+-------+

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

SELECT JSON_EXISTS(
    '{ 
        "name": "Wag", 
        "scores": [ 10, 8, 7 ] 
    }', 
    '$.scores[3]'
    ) AS Result; 

Резултат:

+--------+| Резултат |+--------+| 0 |+-------+

По-голям JSON документ

Ето пример, който използва малко по-голям JSON документ. Тук проверявам за ключ, който съществува в рамките на няколко нива на влагане:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_EXISTS(
    @json_document, 
    '$.details.awards.Sumo 2020'
    ) AS Result; 

Резултат:

+--------+| Резултат |+--------+| 1 |+-------+

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

Ако някой от аргументите е NULL , резултатът е NULL :

SELECT 
    JSON_EXISTS(null, '$.a'),
    JSON_EXISTS('{ "a": 1 }', null); 

Резултат:

+--------------------+------------------- --------------+| JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a":1 }', null) |+--------------------------+------- -------------------------+| NULL | NULL |+---------------------+-------------------- ------------+

Невалиден JSON

Предаването на невалиден JSON води до NULL :

SELECT JSON_EXISTS('{1}', '$.a'); 

Резултат:

+---------------------+| JSON_EXISTS('{1}', '$.a') |+---------------------------+| NULL |+----------------------+

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

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

SELECT JSON_EXISTS(); 

Резултат:

ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „JSON_EXISTS“

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

SELECT JSON_EXISTS('{"a": 1}', '$.a', 3); 

Резултат:

ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „JSON_EXISTS“

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB FOUND_ROWS() Обяснено

  2. Как работи TIMEDIFF() в MariaDB

  3. Как да върнете елементи от JSON масив в MariaDB

  4. Пълен списък с набори от символи, поддържани от MariaDB

  5. Внедряване на MySQL Galera Cluster 4.0 в Amazon AWS EC2