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


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

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


Цитата:
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
vdm
 
Если с переводом объекта (массива) в текст:
SQL код:
select q.idq.data
       
jsonb_set(q.data'{name}'CAST(replace(q.data->>'name''"Иванов"''"Петров"') as jsonb), falsed2
from 
(
values
(1'{"name":["Иванов","Сидоров"], "town":"Paris"}'::jsonb),
(
2'{"name":["Иванов","Сергеев"], "town":"Berlin"}'::jsonb),
(
3'{"name":["Марков"], "town":"Rome"}'::jsonb)
) as 
(iddata)
-- 
where q.data @> '{"name":["Иванов"]}'

Если нужно без конвертирования, можно попробовать повозиться с jsonb_path_query_array() (с версии 12+)
Часовой пояс GMT +3, время: 15:42.

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