码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2020-06-16 13:16:06      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:char   udf   weight   return   end   ota   values   临时表   转行   

创建一个列转行的函数 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中将字符串的列转行和行转列

标签:char   udf   weight   return   end   ota   values   临时表   转行   

原文地址:https://www.cnblogs.com/CodePig/p/13140109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!