2015-10-30 7 views
8

SQLite verfügt nun über eine experimentelle JSON1-Erweiterung zum Arbeiten mit JSON-Feldern. Die zu wählenden Funktionen sehen vielversprechend aus, aber ich verstehe nicht, wie sie im Kontext einer Abfrage verwendet werden.SQLite JSON1-Beispiel für JSON-Extrakt set

Angenommen habe ich die folgende Tabelle:

sqlite> create table user(name,phone); 
sqlite> insert into user values('oz', json_array(['+491765','+498973'])); 

Die Dokumentation zeigt, wie json_each in einer Abfrage verwenden, aber alle anderen Funktionen einige in Zusammenhang Dokumentation fehlen.

Kann jemand mit SQLite Erfahrung ein paar Beispiele dafür, wie man verwendet:

  • json_extract
  • json_set

Antwort

15

So, hier ist ein erstes Beispiel dafür, wie json_extract zu verwenden. Zunächst wird die Daten ein in etwas andere Art und Weise eingefügt:

insert into user (name, phone) values("oz", json('{"cell":"+491765", "home":"+498973"}')); 

Jetzt können wir alle Benutzer Telefonnummern wie in der normalen SQL wählen:

sqlite> select user.phone from user where user.name=='oz'; 
{"cell":"+491765","home":"+498973"} 
sqlite> 

Aber was, wenn wir es nicht tun kümmern sich um Festnetz und wir wollen nur Handys?
Geben Sie json_extract:

sqlite> select json_extract(user.phone, '$.cell') from user; 
+491765 

Und so json_extract verwenden.

Verwenden json_set ist ähnlich. Angesichts der Tatsache, dass wir das Handy aktualisieren möchten:

Sie können diese Funktionsaufrufe in anderen SQL-Abfragen kombinieren. So können Sie SQLite mit strukturierten Daten und mit unstrukturierten Daten in Form von JSON verwenden.

Hier ist, wie der Benutzer Handy nur zu aktualisieren:

sqlite> update user 
    ...> set phone =(select json_set(json(user.phone), '$.cell', 721) from user) 
    ...> where name == 'oz'; 
sqlite> select * from user; 
oz|{"cell":721,"home":"+498973"} 
+0

Gibt es eine Möglichkeit Sie eine select-Anweisung auf einen Wert im json Feld basiert tun kann? –

+0

etwas wie json_extract (user.phone, '$. Cell = 491765') vom Benutzer auswählen; –