【发布时间】:2021-06-12 22:29:56
【问题描述】:
我有一个包含 json 列的表。 json 值看起来像这样:
{'john': 1, 'alex' : 4, 'harry' :2}
如果我想给 john 加 1,我该怎么做呢?
【问题讨论】:
我有一个包含 json 列的表。 json 值看起来像这样:
{'john': 1, 'alex' : 4, 'harry' :2}
如果我想给 john 加 1,我该怎么做呢?
【问题讨论】:
UPDATE mytable -- 6
SET mydata = jsonb_set( -- 4
mydata::jsonb, -- 1
'{john}', -- 2
((mydata ->> 'john')::int + 1)::text::jsonb -- 3
)::json; -- 5
json 类型,则将其转换为jsonb 类型
text 数组->> 操作符返回text 类型,所以要进行integer 操作,您需要将其转换为int 类型。然后添加1。必须将此结果重新转换为类型jsonb。不幸的是,int 类型不能直接转换为jsonb 类型,所以通过text 类型进行中间步骤
jsonb_set()更新(1)中指定的JSON对象json 类型而不是jsonb,则将结果转换回json 类型
【讨论】:
jsonb_set(mydata::jsonb, '{john}', ((mydata ->> 'john')::int + 1)::text::jsonb)::json