Ответ 1
Итак, вот первый пример использования 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>
Но что, если нас не волнуют наземные линии, и мы хотим только сотовые телефоны?
Введите 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"}