[英]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.