13.06.2022 12:35
Использую POSTGRESQL, есть таблица с полем jsonb
SQL код:
select *
from 
(
values
(1, '{"name":["Иванов","Сидоров"], "town":"Paris"}'::jsonb),
(2, '{"name":["Иванов","Сергеев"], "town":"Berlin"}'::jsonb),
(3, '{"name":["Марков"], "town":"Rome"}'::jsonb)
) as q (id, data) 


Нужно в массиве по ключу name заменить Иванов на Петров, в итоге, чтобы
получилось
SQL код:
1    {"name":["Петров","Сидоров"],"town":"Paris"}
2    {"name":["Петров","Сергеев"],"town":"Berlin"}
3    {"name":["Марков"],"town":"Rome"} 
Моих знаний хватило только, для разбиения на массив фамилий и ид. записей

SQL код:
select id, jsonb_array_elements(data->'name')
from 
(
values
(1, '{"name":["Иванов","Сидоров"], "town":"Paris"}'::jsonb),
(2, '{"name":["Иванов","Сергеев"], "town":"Berlin"}'::jsonb),
(3, '{"name":["Марков"], "town":"Rome"}'::jsonb)
) as q (id, data) 
Просьба помочь написать запрос
13.06.2022 15:15
Не понятно как при помощи replace из старых данных (массива) оставить другие фамилии и нужную заменить
13.06.2022 19:01
я так понимаю вас на яндексе забанили... бывает...


Цитата:
Summary: in this tutorial, we will introduce you to the PostgreSQL replace functions that search and replace a substring with a new substring in a string.
13.06.2022 20:41
Если с переводом объекта (массива) в текст:
SQL код:
select q.id, q.data, 
       jsonb_set(q.data, '{name}', CAST(replace(q.data->>'name', '"Иванов"', '"Петров"') as jsonb), false) d2
from 
(
values
(1, '{"name":["Иванов","Сидоров"], "town":"Paris"}'::jsonb),
(2, '{"name":["Иванов","Сергеев"], "town":"Berlin"}'::jsonb),
(3, '{"name":["Марков"], "town":"Rome"}'::jsonb)
) as q (id, data)
-- where q.data @> '{"name":["Иванов"]}'
; 
Если нужно без конвертирования, можно попробовать повозиться с jsonb_path_query_array() (с версии 12+)
Часовой пояс GMT +3, время: 14:48.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.