gpt4 book ai didi

sql - 如何创建将 csv 字段分解为多行的 View ?

转载 作者:行者123 更新时间:2023-11-29 13:38:14 25 4
gpt4 key购买 nike

我有一个结构如下的表:

create table a (
a bigint primary key,
csv varchar(255)
)

我希望能够查询这样的 View (“b”):

select * from b;

产生类似的东西:

a | b
------
1 | A
1 | B
1 | C

对于初始表只有一行数据(1, 'A,B,C')的情况。

在 postgres View 中这可能吗?

最佳答案

在 Postgres 8.4(我相信 8.3)中,regexp_split_to_table 可用。这会起作用,但是,我也需要 8.1 的东西。

这似乎工作正常:

create or replace function split_xmcuser_groups_to_tuples() RETURNS SETOF RECORD AS $$
DECLARE
r a%rowtype;
strLen integer;
curIdx integer;
commaCnt integer;
curCSV varchar;
BEGIN
curIdx := 1;
commaCnt := 1;
FOR r IN SELECT * FROM a
LOOP
strLen := char_length(r.csv);
while curIdx <= strLen LOOP
curIdx := curIdx + 1;
if substr(r.csv, curIdx, 1) = ',' THEN
commaCnt := commaCnt + 1;
END IF;
END LOOP;
curIdx := 1;
while curIdx <= commaCnt LOOP
curCSV := split_part(r.csv, ',', curIdx);
if curCSV != '' THEN
RETURN QUERY select r.a,curCSV;
END IF;
curIdx := curIdx + 1;
END LOOP;
END LOOP;
RETURN;
END
$$ LANGUAGE 'plpgsql';

(是的,我知道性能影响和不这样做的原因)

关于sql - 如何创建将 csv 字段分解为多行的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1396117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com