2015-10-30 15 views
8

SQLiteはJSONフィールドで動作する実験的なJSON1拡張機能を備えています。選択肢の機能は有望ですが、クエリのコンテキストで使用する方法はわかりません。JSiteのSQLite JSON1の例extract set

は、私は、次の表を作成したとします

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

ドキュメントは、クエリでjson_eachを使用する方法を示しますが、他のすべての機能は、コンテキストのドキュメントのいくつかを欠いています。

はSQLiteの経験を持つ誰かが使用する方法のいくつかの例を提供することができます。

  • json_extract
  • json_set

答えて

15

だから、ここjson_extractを使用する方法の最初の例です。私たちがいないものならば、

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

をしかし:今すぐ

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

、我々は通常のSQLのように、すべてのユーザーの電話番号を選択することができます。まず、データは少し異なる方法で挿入されています私たちは唯一の携帯電話が欲しいですか?
json_extractを入力します。

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

そして、これはjson_extractを使用する方法です。

json_setを使用すると同様です。

sqlite> select json_set(json(user.phone), '$.cell', 123) from \ 
     user; 
{"cell":123,"home":"+498973"} 

これらの関数呼び出しを他のSQLクエリで組み合わせることができます。したがって、 は、構造化データではSQLiteを使用し、 JSONでは非構造化データで使用できます。ここで

は、ユーザーの携帯電話を更新する方法である:

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

あなたはJSONフィールドの値に基づいてSELECT文を行うことができます方法はありますか? –

+0

ユーザーの選択json_extract(user.phone、 '$ .cell = 491765')のようなもの; –