postgresql Postgres:如何将JSONB值转换为数字

pkwftd7m  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(2)|浏览(424)

我在转换jsonb值时遇到问题。喜欢引导的人。
我们试图实现的是,一些数据以字符串的形式出现,我们希望将其转换为数字。
考虑以下update语句:

update customer
set traits = jsonb_set(traits, '{arr}',traits->'arr'::text::integer)
where jsonb_typeof(traits->'arr') = 'string'
  and traits->'arr' is not null

我们当前得到以下错误:
[22P02] ERROR: invalid input syntax for type integer: "arr"
我试过各种各样的咒语,但就是想不通。
有人能给我们一条出路吗?!
工作解决方案看起来像这样:

update customer
set traits = jsonb_set(traits, '{arr}',(traits->>'arr')::integer::text::jsonb)
where jsonb_typeof(traits->'arr') = 'string'
  and traits->'arr' is not null

用三重石膏闻起来有点不对劲

e4eetjau

e4eetjau1#

问题是你的表情

traits->'arr'::text::integer

被评估为

traits->('arr'::text::integer)

它试图将'arr'转换为整数(由于明显的原因而失败,并显示您提到的错误消息)。相反,你想

(traits->'arr')::text::integer
-- or
(traits->>'arr')::integer
nxagd54h

nxagd54h2#

从Postgres 14开始,你可以:

UPDATE customer
SET traits['arr'] = traits['arr']::integer::text::jsonb
WHERE jsonb_typeof(traits['arr']) = 'string'
  AND traits['arr'] IS NOT null;

相关问题