我在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 和 valueSELECT t1.id,
regexp_split_to_table(t1.values, E',')
FROM t1;
但我如何识别并标记第一个值?
答案 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;