SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » PostgreSQL » JSONB преобразовать значения из строк в числа (JSONB преобразовать значения из строк в числа)
JSONB преобразовать значения из строк в числа [сообщение #6227] Wed, 05 November 2025 14:08 Переход к следующему сообщению
polin11 в настоящее время не в онлайне  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 перевести строки в числа?
Re: JSONB преобразовать значения из строк в числа [сообщение #6228 является ответом на сообщение #6227] Wed, 05 November 2025 16:06 Переход к предыдущему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 453
Зарегистрирован: August 2022
Senior Member
А сразу вставлять числа - не вариант?
INSERT INTO product VALUES (1, '{"CPU":4, "RAM":16, "HDD":2}');
Предыдущая тема: поправить функцию
Переход к форуму:
  


Текущее время: Thu Nov 06 01:36:59 GMT+3 2025

Общее время, затраченное на создание страницы: 0.01065 секунд