SQL Server中将字符串的列转行和行转列

Posted codepig

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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  -- 删除临时表

 

执行效果:

技术图片

 

以上是关于SQL Server中将字符串的列转行和行转列的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 行转列,列转行

SQL Server 行转列,列转行。多行转成一列

SQL server 行转列 列转行

sql server 动态行转列

sqlserver怎么行转列?

MySQL行转列与列转行