2016-07-07 3 views

Antwort

0

sollte diese Arbeit:

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

Das Array, das ich versuchte, mit Null zu füllen, ist ein Integer-Array. Muss ich es in ein Text-Array konvertieren? habe FEHLER bekommen: operator existiert nicht: integer [] || text [] LINIE 2: COALESCE (NULLIF (arr || Nullen [1: 6- (1 + Array ... ^ TIPP: Kein Operator entspricht den angegebenen Namen und Argumenttyp (en). Sie müssen möglicherweise hinzufügen Explizite Typumwandlungen – fairybetty

+0

@fairybetty ändere einfach '' text [] 'und' :: text' in int :) –

+1

funktioniert! Danke 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 $$; 

Ausgang:

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

keine vollständige Antwort, aber es ist einfach, es auf die Funktion zu konvertieren.

Haftungsausschluss: Geprüft auf PostgreSQL 9.5

+0

danke Abelisto. Meine Version ist 8.2 ... so ist das nicht t arbeiten. – fairybetty

Verwandte Themen