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

数组 – 替换PostgreSQL中数组中的NULL值,第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中可 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,)    FROM   unnest() 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([i],)    FROM   generate_serIEs(1,array_upper(,1)) x(i));$$LANGUAGE sql IMMUtable;

呼叫:

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

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

总结

以上是内存溢出为你收集整理的数组 – 替换PostgreSQL中数组中的NULL值全部内容,希望文章能够帮你解决数组 – 替换PostgreSQL中数组中的NULL值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1181570.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存