2016-05-13 3 views

ответ

4

Попробуйте это:

SELECT 
    username, 
    regexp_split_to_table(towns, E',') 
FROM yourTable 

SQLFIDDLE DEMO

1

Если предположить, что столбцы названы user_name и towns вы можете сделать что-то вроде этого:

select t1.user_name, t2.town 
from the_table t1 
    cross join lateral unnest(string_to_array(t1.towns,',')) as t2 (town) 
0

Опираясь на ответ a_horse_with_no_name, то почему не иметь что-то более простое, как:

--Get some sample data 
WITH test(username, town) as 
(
select 'user 1', array['town1', 'town2', 'town3'] 
UNION 
select 'user 2', array['town3', 'town2', 'town5'] 
) 

--The following gives the results you are after. 
SELECT username, unnest(town) 

FROM test 

Я полностью согласен с использованием unnest функции, но я не понимаю причину для перекрестного соединения.

ОП, очень важно, какой тип данных хранится в вашем «списке». Здесь я предполагаю, что он хранится как ARRAY. Если он хранится в виде строки, тогда ответ Рахула сделает трюк.

Смежные вопросы