簡體   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