首頁 > 資料庫 > mysql教程 > 如何在 PostgreSQL 中將一列分割為多行?

如何在 PostgreSQL 中將一列分割為多行?

Mary-Kate Olsen
發布: 2025-01-06 21:54:44
原創
764 人瀏覽過

How to Split a Column into Multiple Rows in PostgreSQL?

在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;
登入後複製

附加說明

  • WHERE子句用於根據標誌值過濾結果。
  • FROM 清單中的逗號表示 CROSS JOIN,對於 FROM 中的集合回傳函數會自動假定它清單。
  • 如果主題列可以為空或 null,請使用 LEFT JOIN 和 ON TRUE 來保留原始表中的合格行。

以上是如何在 PostgreSQL 中將一列分割為多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板