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

如何在SQL中將一列資料拆分為多行?

Patricia Arquette
發布: 2025-01-05 07:03:42
原創
411 人瀏覽過

How to Split a Column's Data into Multiple Rows in SQL?

如何在 SQL 中將資料列資料分割為行?

在使用關聯式資料庫時,您可能會遇到需要拆分列資料的情況將單列中的資料分成多行。此技術對於將逗號分隔的項目清單分隔為單獨的行等場景特別有用。

要實現此目的,您可以利用 SQL 中字串運算子的強大功能。讓我們來探索兩種將列資料拆分為行的方法:

1。使用分割函數:

您可以建立自訂分割函數,根據特定分隔符號(例如逗號或分號)來分割列資料。以下是您可以使用的範例函數:

CREATE FUNCTION [dbo].[Split](@String VARCHAR(MAX), @Delimiter CHAR(1))
RETURNS @temptable TABLE (items VARCHAR(MAX))
AS
BEGIN
    DECLARE @idx INT
    DECLARE @slice VARCHAR(8000)

    SELECT @idx = 1
    IF LEN(@String)<1 OR @String IS NULL RETURN

    WHILE @idx!= 0
    BEGIN
        SET @idx = CHARINDEX(@Delimiter,@String)
        IF @idx!=0
            SET @slice = LEFT(@String,@idx - 1)
        ELSE
            SET @slice = @String

        IF(LEN(@slice)>0)
            INSERT INTO @temptable(Items) VALUES(@slice)

        SET @String = RIGHT(@String,LEN(@String) - @idx)
        IF LEN(@String) = 0 BREAK
    END

    RETURN
END;
登入後複製

2.使用遞迴CTE:

或者,您可以使用遞迴公用表表達式(CTE) 來獲得相同的結果。這是一個CTE 解:

WITH cte (code, DeclarationItem, Declaration) AS
(
  SELECT Code,
    CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem,
         STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration
  FROM yourtable
  UNION ALL
  SELECT code,
    CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem,
    STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration
  FROM cte
  WHERE Declaration > ''
)
SELECT code, DeclarationItem
FROM cte
登入後複製

用法範例:

要將「yourtable」表中的「宣告」欄位分割為單獨的行,您可以使用上述方法中。例如:

SELECT t1.code, s.items AS declaration
FROM yourtable t1
OUTER APPLY dbo.split(t1.declaration, ',') s
登入後複製

此查詢將產生一個結果,其中「宣告」欄位被拆分為每個項目的單獨行。

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

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