更新 jsonb 对象数组中的键值

问题描述 投票:0回答:2

我有下表

company
,其中
jsonb
列名为
log
:-

|code | log
-----------------------------------------------------------------------------
|K50  | [{"date": "2002-02-06", "type": "Chg Name", "oldvalue": "TEH   "},
         {"date": "2003-08-26", "type": "Chg Name", "oldvalue": "TEOA   "}]
|C44  | [{"date": "2003-05-07", "type": "Chg Name", "oldvalue": "CDE   "}]

如何修剪

oldvalue
中的尾随空白?

arrays postgresql jsonb postgresql-9.6
2个回答
1
投票

您可以混合使用

jsonb
函数和运算符:

UPDATE company c
SET    log = sub.log2
FROM  (
   SELECT *
   FROM   company c
   CROSS  JOIN LATERAL (
      SELECT jsonb_agg(jsonb_set(l, '{oldvalue}', to_jsonb(rtrim(l->>'oldvalue')))) AS log2
      FROM   jsonb_array_elements(c.log) l
      ) sub
   WHERE  jsonb_typeof(log) = 'array'  -- exclude NULL and non-arrays
   ) sub
WHERE  c.code =  sub.code   -- assuming code is unique
AND    c.log  <> sub.log2;  -- only where column actually changed.

SQL 小提琴。


-1
投票

在 PostgreSQL 中,jsonb 数据类型用于存储给定的 JSON 数据。如果您想更新任何嵌套值,您需要先转换代码中的数据,然后才能将其存储在数据库中。在这种情况下,尾随空格无关紧要。如果您想明确更新,也是可以的。

PFB 链接。

如何对 JSONB 类型的列执行更新操作

© www.soinside.com 2019 - 2024. All rights reserved.