Postgresql: разделить строку запятыми и объединить - PullRequest
0 голосов
/ 04 мая 2020

Есть ли способ разбить строку и перегруппировать значения, как показано ниже в Postgresql.

input_column
abc.1, xyz.1, abc.2, abc.3 xyz.3


result_column
abc{1,2,3}, xyz{1,3}

1 Ответ

1 голос
/ 04 мая 2020

Вы можете сначала разбить элементы на строки и агрегат обратно:

select code, array_agg(value) as values
from (
  select split_part(item, '.', 1) as code, 
         split_part(item, '.', 2) as value 
  from the_table t
    cross join regexp_split_to_table(t.input_column, '\s*,\s*') as x(item)
) t    
group by code
order by code

Я использовал regexp_split_to_table() для генерации строк, а не string_to_array() и unnest(), поэтому разбирайтесь с пробелами после запятая. При комбинации unnest() и string_to_array() для этого потребуется дополнительный trim(), что затруднит чтение внутреннего запроса.

Пример в сети

...