【问题标题】:Postgresql update column with integer values具有整数值的 Postgresql 更新列
【发布时间】:2020-11-02 21:02:45
【问题描述】:

我有一个 jsonb 类型的列,包含字符串或整数格式的元素列表。 我现在想要的是将它们全部设为相同类型,例如全部为 int 或全部为字符串格式

试过:这样我得到了单个元素,但我需要更新列表中的所有元素。

SELECT parent_path -> 1 AS path
    FROM abc
    LIMIT 10

Update abc SET parent_path = ARRAY[parent_path]::TEXT[] AS parent_path
FROM abc

UPDATE abc SET parent_path = replace(parent_path::text, '"', '') where id=123

电流输出

         path
[6123697, 178, 6023099]
[625953521394212864, 117, 6023181]
["153", "6288361", "553248635949090971"]
[553248635358954983, 178320, 174, 6022967]
[6050684, 6050648, 120, 6022967]
[653, 178238, 6239135, 38, 6023117]
["153", "6288496", "553248635977039112"]
[553248635998143523, 6023185]
[553248635976194501, 6022967]
[553248635976195634, 6022967]

预期输出

        path
[6123697, 178, 6023099]
[625953521394212864, 117, 6023181]
[153, 6288361, 553248635949090971]   <----
[553248635358954983, 178320, 174, 6022967]
[6050684, 6050648, 120, 6022967]
[653, 178238, 6239135, 38, 6023117]
[153, 6288496, 553248635977039112]   <----
[553248635998143523, 6023185]
[553248635976194501, 6022967]
[553248635976195634, 6022967]

注意:列表中缺少双引号。我尝试了here 的几种方法,但没有运气

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您必须取消嵌套,清理每个元素,然后将其聚合回一个数组:

    以下将所有元素转换为整数:

    select (select jsonb_agg(x.i::bigint order by idx)
            from jsonb_array_elements_text(a.path) with ordinality as x(i, idx)
           ) as clean_path
    from abc a;
    

    【讨论】:

      【解决方案2】:

      您可以使用标量子查询来选择、取消嵌套和聚合元素:

      WITH mytable AS (
          SELECT row_number() over () as id, col::JSONB
          FROM (VALUES ('[6123697, 178, 6023099]'),
                       ('["6123697", "178", "6023099"]')) as bla(col)
      )
      SELECT id, (SELECT JSONB_AGG(el::int) FROM jsonb_array_elements_text(col) as el)
      FROM mytable
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-14
        相关资源
        最近更新 更多