如何在 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中文網其他相關文章!