PostgreSQL,分裂成行并识别第一部分

时间:2014-10-21 10:38:46

标签: sql 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

我可以使用

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

但我如何识别并标记第一个值?

1 个答案:

答案 0 :(得分: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;