sql >> Database teknologi >  >> RDS >> SQLite

JSON_INSERT() vs JSON_SET() vs JSON_REPLACE() i SQLite

SQLite giver flere funktioner til at indsætte, indstille og erstatte værdier i et JSON-dokument. Specifikt giver det json_insert() , json_set() , og json_replace() .

Disse funktioner udfører lignende opgaver, og du kan nogle gange bruge dem i flæng til et vist punkt.

Men der er bestemt en klar forskel mellem hver funktion.

Forskellen

Følgende tabel skitserer forskellen mellem disse funktioner:

Funktion Overskriv, hvis den allerede findes? Opret hvis ikke eksisterer?
json_insert() Nej Ja
json_replace() Ja Nej
json_set() Ja Ja

Så forskellen mellem disse funktioner er, hvordan de håndterer eksisterende og ikke-eksisterende nøgler/værdier.

Eksempler

Her er nogle enkle eksempler for at vise, hvordan hver funktion håndterer eksisterende og ikke-eksisterende nøgler/værdier.

Når nøglen allerede eksisterer

Her er, hvordan hver funktion håndterer opdatering af en nøgle, der allerede eksisterer:

SELECT 
    json_insert('{ "a" : 1 }', '$.a', 2) AS json_insert,
    json_replace('{ "a" : 1 }', '$.a', 2) AS json_replace,
    json_set('{ "a" : 1 }', '$.a', 2) AS json_set;

Resultat:

+-------------+--------------+----------+
| json_insert | json_replace | json_set |
+-------------+--------------+----------+
| {"a":1}     | {"a":2}      | {"a":2}  |
+-------------+--------------+----------+

Vi kan se, at json_insert() opdaterede ikke noget, men det gjorde de to andre funktioner.

Det er en lignende ting med arrays:

SELECT 
    json_insert('[ 1, 2, 3 ]', '$[1]', 4) AS json_insert,
    json_replace('[ 1, 2, 3 ]', '$[1]', 4) AS json_replace,
    json_set('[ 1, 2, 3 ]', '$[1]', 4) AS json_set;

Resultat:

+-------------+--------------+----------+
| json_insert | json_replace | json_set |
+-------------+--------------+----------+
| [1,2,3]     | [1,4,3]      | [1,4,3]  |
+-------------+--------------+----------+

Når nøglen ikke eksisterer

Her er, hvad der sker, når nøglen ikke findes:

SELECT 
    json_insert('{ "a" : 1 }', '$.b', 2) AS json_insert,
    json_replace('{ "a" : 1 }', '$.b', 2) AS json_replace,
    json_set('{ "a" : 1 }', '$.b', 2) AS json_set;

Resultat:

+---------------+--------------+---------------+
|  json_insert  | json_replace |   json_set    |
+---------------+--------------+---------------+
| {"a":1,"b":2} | {"a":1}      | {"a":1,"b":2} |
+---------------+--------------+---------------+

Vi kan se, at json_replace() indsatte ikke det nye nøgle/værdi-par, men det gjorde de to andre funktioner.

Samme beskæftigelse med arrays:

SELECT 
    json_insert('[ 1, 2, 3 ]', '$[3]', 4) AS json_insert,
    json_replace('[ 1, 2, 3 ]', '$[3]', 4) AS json_replace,
    json_set('[ 1, 2, 3 ]', '$[3]', 4) AS json_set;

Resultat:

+-------------+--------------+-----------+
| json_insert | json_replace | json_set  |
+-------------+--------------+-----------+
| [1,2,3,4]   | [1,2,3]      | [1,2,3,4] |
+-------------+--------------+-----------+

Dette kan også gøres ved at bruge [#] sti:

SELECT 
    json_insert('[ 1, 2, 3 ]', '$[#]', 4) AS json_insert,
    json_replace('[ 1, 2, 3 ]', '$[#]', 4) AS json_replace,
    json_set('[ 1, 2, 3 ]', '$[#]', 4) AS json_set;

Resultat:

+-------------+--------------+-----------+
| json_insert | json_replace | json_set  |
+-------------+--------------+-----------+
| [1,2,3,4]   | [1,2,3]      | [1,2,3,4] |
+-------------+--------------+-----------+

En fordel ved at bruge [#] er, at du ikke behøver at vide, hvor mange elementer der allerede er i arrayet.


  1. Webinar:Nye funktioner i PostgreSQL 11 [Opfølgning]

  2. Hvad er databaser?

  3. Sådan fungerer SPACE() i MariaDB

  4. Oracle SQL Where-klausul for at finde datoposter, der er ældre end 30 dage