gpt4 book ai didi

arrays - 如何替换数组中的值

转载 作者:行者123 更新时间:2023-11-29 11:45:20 25 4
gpt4 key购买 nike

我有如下数据。

id              col1[]
--- ------
1 {1,2,3}
2 {3,4,5}

我的问题是如何在数组中使用替换函数。

select array_replace(col1, 1, 100) where id = 1;

但它给出了如下错误:

function array_replace(integer[], integer, integer) does not exist

有人可以建议如何使用它吗?

最佳答案

您的声明(使用缺少的 FROM 子句进行了扩充):

SELECT array_replace(col1, 1, 100) FROM tbl WHERE id = 1;

作为commented by @mu , array_replace()是在 pg 9.3 中引入的。我看到旧版本的 3 个选项:

1。 intarray

只要……

  • 我们正在处理整数数组
  • 元素是独一无二的。
  • 元素的顺序无关紧要。

一个简单而快速的选择是 install the additional module intarray ,它(除其他外)提供运算符来从/向整数数组减去和添加元素(或整个数组):

SELECT CASE col1 && '{1}'::int[] THEN (col1 - 1) +  100 ELSE col1 END AS col1
FROM tbl WHERE id = 1;

2。用 SQL 函数模拟

使用多态类型对 array_replace() 进行(较慢的)直接替换,因此它适用于任何基类型:

CREATE OR REPLACE FUNCTION f_array_replace(anyarray, anyelement, anyelement)
RETURNS anyarray LANGUAGE SQL IMMUTABLE AS
'SELECT ARRAY (SELECT CASE WHEN x = $2 THEN $3 ELSE x END FROM unnest($1) x)';

不替换 NULL 值。相关:

如果你需要保证元素的顺序:

3。对源应用补丁并重新编译

获取补丁 "Add array_remove() and array_replace() functions"从 git repo,将它应用到你的版本源并重新编译。可能会或可能不会干净地应用。您的版本越旧,您的机会就越少。我还没有尝试过,我宁愿升级到当前版本。

关于arrays - 如何替换数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26987139/

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