sql >> Database >  >> RDS >> PostgreSQL

Pas `trim()` en `regexp_replace()` toe op tekstarray

Uw code verandert nooit de multiplevalues reeks. Het verandert gewoon elk element en gooit vervolgens die nieuwe waarde weg.

U hebt een variabele nodig waarin u uw resultaten kunt samenvoegen tot:

CREATE OR REPLACE FUNCTION manipulate_array(multiplevalues text[])
RETURNS text[] AS 
$BODY$
  DECLARE 
    singlevalue text;
    l_result text[] := '{}'::text[]; -- initialize with an empty array
  BEGIN
    FOREACH singlevalue IN ARRAY multiplevalues LOOP
        SELECT trim(regexp_replace(singlevalue, '\s+', ' ', 'g')) INTO singlevalue;
        l_result := l_result || singlevalue; -- append to the result
    END LOOP;

    RETURN l_result; -- return the new array, not the old one
  END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

Maar dit kan een beetje eenvoudiger worden gedaan met behulp van een unnest en array_agg en een gewone SQL-functie (in plaats van PL/pgSQL)

U moet eerst de array uit elkaar halen, de waarden inkorten en deze samenvoegen tot een array.

Ik weet niet zeker of ik begrijp wat je probeert te doen, maar hierdoor worden alle waarden in de array bijgesneden en wordt een nieuwe geretourneerd:

create function trim_all(p_values text[])
  returns text[]
as
$$
  select array_agg(trim(regexp_replace(t.v, '\s+', ' ', 'g')) order by t.nr)
    from unnest(p_values) with ordinality as t(v, nr);
$$
language sql;


  1. Retourneer het verschil tussen twee (datums en tijd) PHP

  2. Hoe te controleren of het openbare PostgreSQL-schema bestaat?

  3. Een BLOB-kolom bijwerken, fout ORA-00932, terwijl Invoegen werkt

  4. Grondbeginselen van tabeluitdrukkingen, deel 12 - Inline tabelwaardige functies