SELECT ARRAY [1,2,3]-ARRAY [5、NULL、6]
postgresql8.4の配列操作にcontrib_int.sqlパッケージを使用しています。上記のクエリでは、NULL
右側に配列があります。このNULL値のため、エラーがスローされます。
"ERROR: array must not contain nulls"
誰かが配列からnull値を削除するのを手伝ってもらえますか?
SELECT ARRAY [1,2,3]-ARRAY [5、NULL、6]
postgresql8.4の配列操作にcontrib_int.sqlパッケージを使用しています。上記のクエリでは、NULL
右側に配列があります。このNULL値のため、エラーがスローされます。
"ERROR: array must not contain nulls"
誰かが配列からnull値を削除するのを手伝ってもらえますか?
1)PostgreSQL8.4以降では配列にNULL値を含めることができます
db=# SELECT ARRAY[5,NULL,6];
array
------------
{5,NULL,6}
2)ただし、標準のPostgreSQL8.4では1つの配列を別の配列から減算することはできません。
db=# SELECT ARRAY[1,2,3] - ARRAY[5,NULL,6];
ERROR: operator does not exist: integer[] - integer[]
3)contribパッケージintarrayがインストールされているPostgreSQL8.4でこれを行うことができます。
4)ただし、NULL値を含む配列を減算することはできません。
5)Rubyで配列を減算することもできます。マニュアルのここ、またはSOのここを参照してください。
Postgres9.3以降はどのアレイにもarray_replace(anyarray, NULL, anyelement)
対応しています。マニュアル。
古いバージョンの場合:
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()
PostgreSQL8.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}
免責事項:どちらのバージョンも多次元配列には適合しません。