PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zastosuj `trim()` i `regexp_replace()` na tablicy tekstowej

Twój kod nigdy nie zmienia multiplevalues szyk. Po prostu zmienia każdy element, a następnie odrzuca tę nową wartość.

Potrzebujesz zmiennej, w której możesz agregować wyniki w:

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;

Ale można to zrobić nieco prościej, używając unnest i array_agg oraz zwykłej funkcji SQL (zamiast PL/pgSQL)

Musisz najpierw rozpakować tablicę, przyciąć wartości i agregację z powrotem do tablicy.

Nie jestem pewien, czy rozumiem, co próbujesz zrobić, ale spowoduje to przycięcie wszystkich wartości w tablicy i zwrócenie nowej:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak wykonać skrypt pgsql w pgAdmin?

  2. Usunąć bazę danych dostępną dla innych użytkowników?

  3. Zgrupowane LIMIT w PostgreSQL:pokazać pierwsze N ​​wierszy dla każdej grupy?

  4. Jak odczytać wszystkie wiersze z ogromnego stołu?

  5. Błąd pgAdmin - relacja [nazwa funkcji/Widoki/Funkcje wyzwalania] nie istnieje