gpt4 book ai didi

arrays - 在 PostgreSQL 中替换数组中的 NULL 值

转载 作者:行者123 更新时间:2023-11-29 11:26:55 24 4
gpt4 key购买 nike

选择数组[1,2,3] - 数组[5,NULL,6]

我在 postgresql 8.4 中使用 contrib _int.sql 包进行数组操作在上面的查询中,右侧数组中有一个 NULL。由于此 NULL 值,它会引发错误:

"ERROR:  array must not contain nulls"

谁能帮我从数组中删除空值?

最佳答案

1) 在 PostgreSQL 8.4+

中,数组 可以包含 NULL 值
db=# SELECT ARRAY[5,NULL,6];
array
------------
{5,NULL,6}

2) 但是在标准 PostgreSQL 8.4 中,您不能从另一个数组中减去一个数组。

db=# SELECT ARRAY[1,2,3] - ARRAY[5,NULL,6];
ERROR: operator does not exist: integer[] - integer[]

3) 您可以在 PostgreSQL 8.4 中使用 contrib package intarray 执行此操作安装。

4) 但是您不能减去包含 NULL 值的数组。

5) 您还可以Ruby 中减去数组。参见 here in the manual , 或 here on SO .


在 PostgreSQL 中替换整数数组中的 NULL 的解决方案:

Postgres 9.3 或更高版本具有array_replace(anyarray, NULL, anyelement) any 数组。 The manual.

在旧版本中:

CREATE OR REPLACE FUNCTION f_int_array_replace_null (int[], int)
RETURNS int[] AS
$$
SELECT ARRAY (
SELECT COALESCE(x, $2)
FROM unnest($1) x);
$$ LANGUAGE SQL IMMUTABLE;

unnest()随 PostgreSQL 8.4
引入对于旧版本,您可以使用 generate_series() :

CREATE OR REPLACE FUNCTION f_int_array_replace_null (int[], int)
RETURNS int[] AS
$$
SELECT ARRAY (
SELECT COALESCE($1[i], $2)
FROM generate_series(1, array_upper($1, 1)) x(i));
$$ LANGUAGE SQL IMMUTABLE;

调用:

event=# SELECT f_int_array_replace_null (ARRAY[5,NULL,6], 0);
f_int_array_replace_null
--------------------------
{5,0,6}

免责声明:两个版本都不适合多维数组。

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

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