【问题标题】:Postgresql update a value in a jsonb array columnPostgresql 更新 jsonb 数组列中的值
【发布时间】:2020-02-20 17:08:59
【问题描述】:

我有一个带有 jsonb 的表和里面的数据:

[
{
    "valor": "2025,79",
    "parcela": 46,
    "vencimento": 1570503600000
},
{
    "valor": "1987,7",
    "parcela": 47,
    "vencimento": 1573182000000
},
{
    "valor": "1950,47",
    "parcela": 48,
    "vencimento": 1575774000000
},
{
    "valor": "1912,88",
    "parcela": 49,
    "vencimento": 1578452400000
}

]

但现在我需要在所有行中将“vencimento”中的值从 1573182000000 更改为“10/10/2010”

有可能吗?

使用此代码,我可以将数组拆分为列并更改 te 值

SELECT id, jsonb_set(d, '{vencimento}',
 quote_ident(to_char(to_timestamp(cast((d -> 'vencimento')::varchar as bigint) / 1000)::date, 'dd/mm/yyyy'))::jsonb
) 
    FROM notificato.requerimento, jsonb_array_elements(parcela) d where id = 1;

但是如何更新我的行?

tks

【问题讨论】:

    标签: postgresql jsonb


    【解决方案1】:

    使用 jsonb_agg 将值收集回 jsonb 数组并将其分配给您的列:

    UPDATE notificato.requerimento
    SET parcela = (SELECT jsonb_agg(
      jsonb_set(d, '{vencimento}', to_jsonb(to_char(to_timestamp((d ->> 'vencimento')::bigint / 1000)::date, 'dd/mm/yyyy'))
    ) FROM jsonb_array_elements(parcela) d)
    WHERE id = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2020-12-09
      • 2018-05-03
      • 1970-01-01
      相关资源
      最近更新 更多