我想使用分隔符(逗号)

时间:2016-03-04 09:53:02

标签: sql-server

我想使用分隔符(逗号)将一列拆分为多个列。请有人帮忙解决这个问题:

Values
--------------
352306055351667,LoginId,gangadaran.s,Password,1,VersionCode,38,DistributorId,158,OrganisationId,33,MobileDate,2014\/04\/04,13,40,10,UserId,7916,LastDayClose,,BranchId,158,DownloadedDataDate,2014\/04\/04

我想要它:

col1           | col2   | col3        | col4     | col5|........|  col23
-----------------------------------------------------------------------------
352306055351667|LoginId | gangadaran.s| Password | 1   |........|  2014\/04\/04

2 个答案:

答案 0 :(得分:0)

您可以尝试this

CREATE FUNCTION dbo.fnSplit(
    @sInputList VARCHAR(8000) -- List of delimited items
  , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items
) RETURNS @List TABLE (item VARCHAR(8000))

BEGIN
DECLARE @sItem VARCHAR(8000)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
 BEGIN
 SELECT
  @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
  @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))

 IF LEN(@sItem) > 0
  INSERT INTO @List SELECT @sItem
 END

IF LEN(@sInputList) > 0
 INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END
GO

然后简单地说:

select * from dbo.fnSplit('352306055351667,LoginId,gangadaran.s,Password,1,VersionCode,38,DistributorId,158,OrganisationId,33,MobileDate,2014\/04\/04,13,40,10,UserId,7916,LastDayClose,,BranchId,158,DownloadedDataDate,2014\/04\/04', ',')

答案 1 :(得分:0)

要从您的问题中获得结果:

DECLARE @string NVARCHAR(MAX) =  '352306055351667,LoginId,gangadaran.s,Password,1,VersionCode,38,DistributorId,158,OrganisationId,33,MobileDate,2014\/04\/04,13,40,10,UserId,7916,LastDayClose,,BranchId,158,DownloadedDataDate,2014\/04\/04',
        @xml xml
select @xml = cast('<d><q>'+REPLACE(@string,',','</q><q>')+'</q></d>' as xml);

SELECT  n.v.value('q[1]','NVARCHAR(50)') as Col1,
        n.v.value('q[2]','NVARCHAR(50)') as Col2,
        n.v.value('q[3]','NVARCHAR(50)') as Col3,
        n.v.value('q[4]','NVARCHAR(50)') as Col4,
        n.v.value('q[5]','NVARCHAR(50)') as Col5,
        n.v.value('q[6]','NVARCHAR(50)') as Col6,
        n.v.value('q[7]','NVARCHAR(50)') as Col7,
        n.v.value('q[8]','NVARCHAR(50)') as Col8,
        n.v.value('q[9]','NVARCHAR(50)') as Col9,
        n.v.value('q[10]','NVARCHAR(50)') as Col10,
        n.v.value('q[11]','NVARCHAR(50)') as Col11,
        n.v.value('q[12]','NVARCHAR(50)') as Col12,
        n.v.value('q[13]','NVARCHAR(50)') as Col13,
        n.v.value('q[14]','NVARCHAR(50)') as Col14,
        n.v.value('q[15]','NVARCHAR(50)') as Col15,
        n.v.value('q[16]','NVARCHAR(50)') as Col16,
        n.v.value('q[17]','NVARCHAR(50)') as Col17,
        n.v.value('q[18]','NVARCHAR(50)') as Col18,
        n.v.value('q[19]','NVARCHAR(50)') as Col19,
        n.v.value('q[20]','NVARCHAR(50)') as Col20,
        n.v.value('q[21]','NVARCHAR(50)') as Col21,
        n.v.value('q[22]','NVARCHAR(50)') as Col22,
        n.v.value('q[23]','NVARCHAR(50)') as Col23,
        n.v.value('q[24]','NVARCHAR(50)') as Col24
FROM @xml.nodes('/d') AS n(v)

结果:

Col1                                               Col2                                               Col3                                               Col4                                               Col5                                               Col6                                               Col7                                               Col8                                               Col9                                               Col10                                              Col11                                              Col12                                              Col13                                              Col14                                              Col15                                              Col16                                              Col17                                              Col18                                              Col19                                              Col20                                              Col21                                              Col22                                              Col23                                              Col24
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
352306055351667                                    LoginId                                            gangadaran.s                                       Password                                           1                                                  VersionCode                                        38                                                 DistributorId                                      158                                                OrganisationId                                     33                                                 MobileDate                                         2014\/04\/04                                       13                                                 40                                                 10                                                 UserId                                             7916                                               LastDayClose                                                                                          BranchId                                           158                                                DownloadedDataDate                                 2014\/04\/04

(1 row(s) affected)