我在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值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)