加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

数组 – 替换PostgreSQL中数组中的NULL值

发布时间:2020-12-13 18:07:09 所属栏目:百科 来源:网络整理
导读:SELECT ARRAY [1,2,3] – ARRAY [5,NULL,6] 我在postgresql 8.4中使用contrib _int.sql包进行数组操作 在上面的查询中,右侧数组中有一个NULL.由于此NULL值,它会引发错误: "ERROR: array must not contain nulls" 任何人都可以帮我从数组中删除空值吗? 1)数
SELECT ARRAY [1,2,3] – ARRAY [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,6];
   array
------------
 {5,6}

2)但是你不能在标准PostgreSQL 8.4中从另一个ARRAY中减去一个ARRAY.

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

3)你可以在安装了contrib package intarray的PostgreSQL 8.4中做到这一点.

4)但是你不能减去包含NULL值的数组.

5)你也可以在Ruby中减去数组.见here in the manual或here on SO.

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

Postgres 9.3或更高版本具有任何数组的array_replace(anyarray,anyelement). 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;

PostgreSQL 8.4引入了unnest()
对于旧版本,您可以使用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,6],0);
 f_int_array_replace_null
--------------------------
 {5,6}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读