SQL Server中將字符串的列轉行和行轉列


創建一個列轉行的函數 udf_ConvertStrToTable

/*                                    
                      
  -- 如將以某個字符相隔的字符串字符串轉換為表  
  -- 如字符串:Nothing,is,impossible,to,a,willing,heart
  --          SELECT * FROM udf_ConvertStrToTable('Nothing,is,impossible,to,a,willing,heart', ',')    
                                                              
*/  
  
CREATE FUNCTION [dbo].[udf_ConvertStrToTable]
(
    @Str NVARCHAR(MAX),
    @SplitSymbol CHAR(1) = ','
)
RETURNS @aTable TABLE
(
    Iden INT,
    Item VARCHAR(500)
)
AS
BEGIN

    DECLARE @i INT 

    SET @i = 0
    WHILE RIGHT(@Str, 1) = @SplitSymbol
    SET @Str = LEFT(@Str, LEN(@Str) - 1)

    DECLARE @iIndex INT
    SET @iIndex = CHARINDEX(@SplitSymbol, @Str)

    WHILE @iIndex > 0
    BEGIN
        SET @i = @i + 1

        INSERT INTO @aTable
        (
            Iden,
            Item
        )
        VALUES

        (@i, LEFT(@Str, @iIndex - 1))
        SELECT @Str = SUBSTRING(@Str, @iIndex + 1, 6000)
        SET @iIndex = CHARINDEX(@SplitSymbol, @Str)
    END

    IF LTRIM(RTRIM(@Str)) <> ''
    BEGIN
        INSERT INTO @aTable
        (
            Iden,
            Item
        )
        VALUES
        (@i + 1, @Str)

    END

    RETURN

END

 

具體用法:

DECLARE @Sample VARCHAR(MAX) = 'Nothing,is,impossible,to,a,willing,heart';

-- 列轉行
SELECT * FROM udf_ConvertStrToTable(@Sample, ',')


-- 行轉列
SELECT * INTO #Temp FROM udf_ConvertStrToTable(@Sample, ',')   -- 將上面同樣的查詢結果寫入臨時表 #Temp

SELECT STUFF((SELECT ',' + A.Item FROM #Temp A ORDER BY Iden FOR XML PATH('')), 1, 1, '') AS Result

DROP TABLE #Temp  -- 刪除臨時表

 

執行效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM