2016-07-07 21 views

回答

0

这应该工作:

CREATE TEMP TABLE t AS (SELECT arr::text[] FROM UNNEST('{"{1}","{}","{a,b,c}"}'::text[]) arr); 
SELECT COALESCE(NULLIF(arr || nulls[1:max-(1+array_upper(arr, 1)-array_lower(arr, 1))], '{}'), nulls[1:max]) 
FROM t, 
    (SELECT ARRAY(SELECT NULL::text FROM generate_series(1, 100)) AS nulls) a, 
    (SELECT 1 + max(array_upper(arr, 1)-array_lower(arr, 1)) AS max FROM t) m 
+0

我试图垫具有空阵列是一个整数阵列。我必须将其转换为文本数组吗?得到错误:运算符不存在:integer [] ||文本[] 第2行:COALESCE(NULLIF(arr || nulls [1:6-(1 + array ...) ^ 提示:没有操作符与给定的名称和参数类型相匹配。显式类型转换 – fairybetty

+0

@fairybetty只需将':: text []'和':: text'改为int :) –

+1

works!谢谢Ziggy !!! – fairybetty

1
do $$ 
declare 
    arr int[] := array[1,2,3]; 
begin 
    raise info '%', arr; 
    arr[1] := coalesce(arr[1]); -- Set lower bound if array is null 
    arr[10] := coalesce(arr[10]); -- Set upper bound 
    raise info '%', arr; 
end $$; 

输出:

INFO: {1,2,3} 
INFO: {1,2,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL} 

不是一个完整的答案,但很容易将其转换为功能。

声明:测试在PostgreSQL的9.5

+0

谢谢Abelisto。我的版本是8.2 ...所以这并不是'工作。 – fairybetty