Начало » Использование СУБД » PostgreSQL » JSONB преобразовать значения из строк в числа (JSONB преобразовать значения из строк в числа)
| JSONB преобразовать значения из строк в числа [сообщение #6227] |
Wed, 05 November 2025 14:08  |
polin11
Сообщений: 10 Зарегистрирован: January 2023
|
Junior Member |
|
|
Использую PGSQL 16.
Есть таблица
CREATE TABLE product (
id INT,
details JSONB
);
INSERT INTO product VALUES (1, '{"CPU":"4", "RAM":"16", "HDD":"2"}');
INSERT INTO product VALUES (2, '{"CPU":"3", "RAM":"8", "HDD":"1"}');
id | details
----+---------------------------------------
1 | {"CPU": "4", "HDD": "2", "RAM": "16"}
2 | {"CPU": "3", "HDD": "1", "RAM": "8"}
Значения в JSONB - строки, нужно преобразовать в числа. Чтобы получились такие данные
id | details
----+---------------------------------
1 | {"CPU": 4, "HDD": 2, "RAM": 16}
2 | {"CPU": 3, "HDD": 1, "RAM": 8}
Написал работающий запрос:
with t as(
select
(select array_agg(replace(replace(v::text, '"', ''), '\', '')::int order by k)
from jsonb_each(details) as t(k,v)) as col22,
(select array_agg(k order by k)
from jsonb_each(details) as t(k,v)) as col11,
id
from product
),
a as(
select
(
select jsonb_object_agg(col1, col2)
from (
select unnest(col11) as col1, unnest(col22) as col2
) t
) AS itog,
id
from t
)
update product
set details = itog
from a
where product.id = a.id
returning product.*
В запросе приходится редактировать строки (удалять кавычки), возможно есть
проще способ через CAST перевести строки в числа?
|
|
|
|
|
|
Переход к форуму:
Текущее время: Thu Nov 06 01:36:59 GMT+3 2025
Общее время, затраченное на создание страницы: 0.01065 секунд
|