PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Приложете „trim()“ и „regexp_replace()“ върху текстов масив

Вашият код никога не променя multiplevalues масив. Той просто променя всеки елемент, след което изхвърля тази нова стойност.

Имате нужда от променлива, където можете да обедините резултатите си в:

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;

Но това може да се направи малко по-просто с помощта на unnest и array_agg и обикновена SQL функция (вместо PL/pgSQL)

Първо трябва да разместите масива, да отрежете стойностите и агрегата обратно в масив.

Не съм сигурен, че разбирам какво се опитвате да направите, но това ще изреже всички стойности в масива и ще върне нова:

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. Функция за сходство в Postgres с pg_trgm

  2. Създайте динамична таблица от функция в PostgreSQL

  3. Как да форматирате числата като валута в PostgreSQL

  4. Поправете „ГРЕШКА:  всяка UNION заявка трябва да има същия брой колони“ в PostgreSQL

  5. Orbeon Forms Postgres DB връзка