繁体   English   中英

如何将CSV转换为单行的列?

[英]How to convert a CSV into columns of a single row?

我有一个逗号分隔的变量,例如

a,b,c,d,e

我希望所有这些变量都作为单行的列

喜欢

a|b|c|d|e --------

更多例子

MISC FEES,UNIV EXE,ID FEE,TENT FEE,CAU FEES,GYM FEE 

这是我用逗号分隔的变量,使用SQL我需要将其转换为列

MISCFEES UNIVEXE IDFEE TENTFEE CAUFEES GYMFEE 

作为单行的列值,杂项费用是第一列,univfee是下一列,依此类推

SQL Server没有用于将逗号分隔的值添加到单行中的单独列的内置功能。 您必须使用函数或存储过程来构建它。

您可以使用CHARINDEX查找每个定界符的位置,然后使用SUBSTRING来获取逗号之间的每个值并相应地更新您的列。

下面的函数会将逗号分隔列表的每个值分成几列,并返回一个表。

CREATE FUNCTION [dbo].[fn_CommaDelimitedToTable]
    (
      @String AS varchar(MAX)
    )
RETURNS @RetTable Table ( DataValue varchar(500) )
AS BEGIN
    DECLARE @ReturnedTable Table ( DataValue varchar(500) )
    DECLARE @BreakLoop Int
    DECLARE @CharIndex Int
    DECLARE @StringTmp Varchar(MAX)
    DECLARE @WrdTmp Varchar(500)
    DECLARE @Count Int
    SET @StringTmp = @String
    SET @Count = 0
    SET @BreakLoop = 0
    WHILE @BreakLoop = 0
        BEGIN
            SET @CharIndex = CHARINDEX(',', @StringTmp, 1)
            IF @CharIndex = 0 OR @CharIndex IS NULL
                BEGIN
                    SET @WrdTmp = Ltrim(Rtrim(@StringTmp))
                    SET @BreakLoop = 1
                END
            ELSE 
                BEGIN

                    SET @WrdTmp = ltrim(rtrim(Left(@StringTmp, @CharIndex - 1)))

                    SET @StringTmp = Ltrim(rtrim(Right(@StringTmp,
                                                       Len(@StringTmp)
                                                       - Len(@WrdTmp) - 1)))
                END

            INSERT  INTO @ReturnedTable ( DataValue )
            VALUES  ( @WrdTmp )
            SET @WrdTmp = ''
            SET @Count = @Count + 1
            IF @BreakLoop = 1 
                BEGIN 
                    BREAK
                END
            ELSE 
                BEGIN
                    CONTINUE
                END
        END
    INSERT  INTO @RetTable
            SELECT  DataValue
            FROM    @ReturnedTable
    RETURN
   END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM