Это немного сложное решение, но оно работает нормально.
create or replace function splitjoin(records TEXT[]) returns TEXT[] as $$
declare
cursrow varchar(20) ;
output varchar(30) :='' ;
nums TEXT[] := ARRAY[]::TEXT[];
rec text;
begin
FOREACH rec IN ARRAY records LOOP
FOR counter IN 1..length(rec) BY 1 LOOP
output=output||'-'||substring(rec,counter,1);
END LOOP;
nums =array_append(nums,substring(output,2));
output='';
END LOOP;
RETURN nums;
end ; $$
language plpgsql;
Создайте указанную выше функцию и затем выполните следующую команду выбора
select unnest( splitjoin( (select array(select name||age||sex||city :: text from table )))::text[]);
Вы передаете массив объединенных записей например, {abcd33malepqr,efgh11femaleabc}
, а результат функции также является массивом {a-b-c-d-3-3-m-a-l-e-p-q-r,e-f-g-h-1-1-f-e-m-a-l-e-a-b-c}
, поэтому использование unnest в select для возврата записей как
a-b-c-d-3-3-m-a-l-e-p-q-r
e-f-g-h-1-1-f-e-m-a-l-e-a-b-c