2014-10-21 2 views
2

У меня есть таблица в PostgreSQL:PostgreSQL, разбиение на строки и распознавания первой части

CREATE TABLE t1 (
id SERIAL, 
values TEXT); 

INSERT INTO t1 (values) 
VALUES ('T815,T847'), ('F00,B4R,B4Z'), ('AS5,XX3'), ('G00'); 

как:

id|values 
-------------- 
1 |T815,T847 
2 |F00,B4R,B4Z 
3 |AS5,XX3 
4 |G00 

мне нужно разделить значения в столбце значений на отдельной строке и отметьте первые значения, как это:

id|first|value 
-------------- 
1 | yes | T815 
1 |  | T84T 
2 | yes | F00 
2 |  | B4R 
2 |  | B4Z 
3 | yes | AS5 
3 |  | XX3 
4 | yes | G00 

я могу производить идентификатор и значение с:

SELECT t1.id, 
     regexp_split_to_table(t1.values, E',') 
FROM t1; 

, но как бы я распознавать и метить первые значения?

ответ

3

Там может быть лучше, но вы можете использовать метод грубой силы:

SELECT t1.id, value, 
     (case when values like value || '%' then 'yes' end) as first 
FROM (SELECT t1.id, t1.values, 
      regexp_split_to_table(t1.values, E',') as value 
     FROM t1 
    ) t1; 
+0

Это хорошо, спасибо. Теперь, читая ваше решение, я понимаю, что должен был использовать имена, отличные от t1, значения или значений ... –

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