[英]Divide a value in JSON using postgreSQL
我比较新,想重新命名我当前数据库中的一些值。 这意味着进入我数据库中的 jasonb 列,选择一个键值并将其除以 1000。我知道如何选择值,但是在执行计算后更新失败了。 我的表名是 property_calculation,有两列如下: * dynamic_fields 是我的 jasonb 列
ID | 动态字段 |
---|---|
1 | {"totalBaseValue": 4198571.230720645844841865113039602874778211116790771484375,"surfaceAreaValue": 18.108285497586717127660449477843940258026123046875,"assessedAnnualValue": 1801819.534798908603936834409607936611000776616631213755681528709828853607177734375} |
2 | {"totalBaseValue": 7406547.28939837918763178237213651300407946109771728515625,"surfaceAreaValue": 31.94416993248973568597648409195244312286376953125,"assessedAnnualValue": 9121964.022681592442116216621222042691512210677018401838722638785839080810546875} |
我想通过将其除以 1000 并将其作为新值重新提交来更新 dynamic_fields.totalBaseValue。 我尝试了以下但没有成功:
更新 property_calculation 集 dynamic_fields = (
select jsonb_agg(case
when jsonb_typeof(elem -> 'totalBaseValue') = 'number'
then jsonb_set(elem, array['totalBaseValue'], to_jsonb((elem ->> 'totalBaseValue')::numeric / 1000))
else elem
end)
from jsonb_array_elements(dynamic_fields::jsonb) elem)::json;
我收到以下错误:
错误:无法从对象中提取元素
SQL状态:22023
我的 json 列没有零字符串或空值。
将jsonb_typeof()
检查移到 where 子句中:
update property_calculation
set dynamic_fields =
jsonb_set(
dynamic_fields,
'{totalBaseValue}',
to_jsonb((dynamic_fields->>'totalBaseValue')::numeric / 1000)
)
where jsonb_typeof(dynamic_fields->'totalBaseValue') = 'number';
db<> 在这里摆弄
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.