繁体   English   中英

SQL:将字符串或数组元素中的标记转换为表的行

[英]SQL: convert tokens in a string or elements of an array into rows of a table

SQL中是否有一种简单的方法可以将字符串或数组转换为表的行?

例如,让我们保持字符串为'a,b,c,d,e,f,g'。 我更喜欢使用该字符串的SQL语句,将其以逗号分隔并将结果字符串插入表中。 在PostgreSQL中,我可以使用regexp_split_to_array()并将字符串拆分为一个数组。 因此,如果您知道一种将数组的元素作为行插入表中的方法,那么也可以。

要将数组变成行集,您可以简单地使用unnest()

SELECT unnest('{1,2,3,4}'::int[])

然后,您当然可以将其与regexp_split_to_array结合使用以成为:

SELECT unnest(regexp_split_to_array('1,2,3,4', ','))

或如前所述,如果是简单拆分,请使用string_to_array()而不是regexp_split_to_array()。

我将使用string_to_array ,它会更快一些:)尽管如此,您可以使用generate_series技巧从中创建一个table

CREATE OR REPLACE FUNCTION array_to_table(anyarray)
RETURNS SETOF anyelement AS $$ 
SELECT $1[i] 
FROM generate_series(array_lower($1,1), array_upper($1,1)) g(i);
$$ LANGUAGE SQL STRICT IMMUTABLE;

SELECT * FROM array_to_table(string_to_array('a,b,c,d,e,f,g', ','));

带(1,7,2)的Generate_series(FROM,TO,STEP)产生一个1,3,5,7系列,可用于为子字符串(COLUMN,INDEX,LEN)索引数组:

SELECT substring ('a,b,c,d', generate_series (1, 7, 2), 1) AS x ;
 x 
---
 a
 b
 c
 d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM