SQLiteには、JSONフィールドを操作するための実験的なJSON1拡張があります。選択する関数は有望に見えますが、クエリのコンテキストでそれらを使用する方法がわかりません。
次の表を作成したとします。
sqlite> create table user(name,phone);
sqlite> insert into user values('oz', json_array(['+491765','+498973']));
ドキュメント は、json_each
はクエリ内にありますが、他のすべての関数にはコンテキストドキュメントの一部がありません。
SQLiteの経験がある人が使用方法のいくつかの例を提供できますか。
json_extract
json_set
そこで、json_extract
の使用方法の最初の例を示します。まず、データは少し異なる方法で挿入されます。
insert into user (name, phone) values("oz", json('{"cell":"+491765", "home":"+498973"}'));
これで、通常のsqlと同様に、すべてのユーザーの電話番号を選択できます。
sqlite> select user.phone from user where user.name=='oz';
{"cell":"+491765","home":"+498973"}
sqlite>
しかし、固定電話を気にせず、携帯電話だけが必要な場合はどうでしょうか。
Enter 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"}