sql >> Database teknologi >  >> RDS >> MariaDB

MariaDB JSON_EXISTS() Forklaret

I MariaDB, JSON_EXISTS() er en indbygget funktion, der giver dig mulighed for at kontrollere, om der findes en værdi ved en specificeret sti i JSON-dokumentet.

Den accepterer JSON-dokumentet som et argument og returnerer 1 hvis stien er fundet, og 0 hvis det ikke er.

MariaDB-dokumentationen siger, at funktionen "bestemmer, om der findes en specificeret JSON-værdi i de givne data". Funktionen ser dog ikke ud til at tjekke for en given værdi. Det er nok mere præcist at sige, at det bestemmer, om en specificeret sti eksisterer, eller at der findes en værdi ved den angivne sti.

For at kontrollere, at den faktiske værdi eksisterer, kan du bruge JSON_CONTAINS() funktion.

Syntaks

Syntaksen ser sådan ud:

JSON_EXISTS(json_doc, path) 

Hvor json_doc er JSON-dokumentet og path er vejen til at finde.

Eksempel

Her er et eksempel til at demonstrere.

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

Resultat:

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

I dette tilfælde er stien fundet, og resultatet er 1 .

Hvis stien ikke findes, er resultatet 0 , sådan her:

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

Resultat:

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

Arrays

I dette eksempel tjekker jeg for eksistensen af ​​et element ved et givet indeks af et array:

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

Resultat:

+--------+| Resultat |+--------+| 1 |+--------+

Her er, hvad der sker, hvis indekset ikke findes i arrayet:

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

Resultat:

+--------+| Resultat |+--------+| 0 |+--------+

Større JSON-dokument

Her er et eksempel, der bruger et lidt større JSON-dokument. Her tjekker jeg efter en nøgle, der findes inden for flere niveauer af indlejring:

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; 

Resultat:

+--------+| Resultat |+--------+| 1 |+--------+

Nul-argumenter

Hvis nogle af argumenterne er NULL , resultatet er NULL :

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

Resultat:

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

Ugyldig JSON

Overførsel af ugyldig JSON resulterer i NULL :

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

Resultat:

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

Forkert parameterantal

Angivelse af ingen argumenter resulterer i en fejl:

SELECT JSON_EXISTS(); 

Resultat:

FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_EXISTS'

Det er det samme, når du giver for mange argumenter:

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

Resultat:

FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'JSON_EXISTS'

  1. Gentagelse af rækker baseret på kolonneværdi i hver række

  2. Sammenligning af Galera Cluster Cloud-tilbud:Anden del af Google Cloud Platform (GCP)

  3. Hvordan kan jeg tilføje nye kolonner til en SQLite-database, efter at Android-appen er frigivet?

  4. Sådan øges filstørrelsen af ​​en datafil i SQL Server (T-SQL)