Пример SQLite JSON1 для извлечения JSON \set
SQLite теперь имеет экспериментальное расширение JSON1 для работы с полями JSON. Функции на выбор выглядят многообещающе, но я не понимаю, как их использовать в контексте запроса.
Предположим, я создал следующую таблицу:
sqlite> create table user(name,phone);
sqlite> insert into user values('oz', json_array(['+491765','+498973']));
Документация показывает, как использовать json_each
в запросе, но все остальные функции не хватает некоторых в контекстной документации.
Может ли кто-то с опытом работы с SQLite привести несколько примеров использования:
json_extract
json_set
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"}