gpt4 book ai didi

具有整数值的 Postgresql 更新列

转载 作者:行者123 更新时间:2023-12-01 23:43:37 24 4
gpt4 key购买 nike

我有一个 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 中的几种方法但没有运气

最佳答案

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

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

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;

关于具有整数值的 Postgresql 更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64645487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com