在Postgres 中將列拆分為多行
假設您有一個表,其中一列包含多個值,例如:
subject | flag --------+----- this is a test | 2
您可能需要將此表轉換為新結構,其中原始列中的每個值都成為單獨的行,如下所示:
token | flag --------+----- this | 2 is | 2 a | 2 test | 2
使用LATERAL Join 的解(Postgres 14 )
Postgres 14 及更高版本提供了一種使用LATERAL join 實現此目的的有效方法string_to_table() 函數。此函數將主題列拆分為標記數組:
SELECT token, flag FROM tbl, string_to_table(subject, ' ') AS token WHERE flag = 2;
使用string_to_array() 的解決方案(Postgres 13-)
對於Postgres 13 或更早版本,請使用string_to_array()函數而不是string_to_table():
SELECT unnest(string_to_array(subject, ' ')) AS token, flag FROM tbl WHERE flag = 2;
使用正規表示式的替代方案
另一個選擇是使用regexp_split_to_table() 函數,儘管它的效率低於string_to_table()方法:
SELECT s.token, t.flag FROM tbl t CROSS JOIN regexp_split_to_table(subject, ' ') AS s(token) WHERE t.flag = 2;
附加說明
以上是如何在 PostgreSQL 中將一列分割為多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!