繁体   English   中英

使用 postgreSQL 将 JSON 中的值相除

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM