数组 – 替换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包进行数组操作 "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引入了 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} 免责声明:两个版本都不适合多维数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |