Converting comma delimited string to multiple columns in sql server

后端 未结 4 942
借酒劲吻你
借酒劲吻你 2020-12-22 03:49

I want to extract specific strings separated by a comma and parse across the specific columns in SQL server 2008. The table structure in SQL server is as follows:

         


        
4条回答
  •  情歌与酒
    2020-12-22 04:09

    With the help of a Split function:

    CREATE FUNCTION [dbo].[SplitStrings]
    (
       @List       VARCHAR(MAX),
       @Delimiter  CHAR(1)
    )
    RETURNS TABLE
    AS
       RETURN ( SELECT Item FROM ( SELECT Item = x.i.value('(./text())[1]', 'varchar(max)') 
          FROM  ( SELECT [XML] = CONVERT(XML, '' + REPLACE(@List, @Delimiter, '') 
                  + '').query('.') ) AS a CROSS APPLY [XML].nodes('i') AS x(i)
              ) AS y WHERE Item IS NOT NULL
       );
    GO
    

    You can do it this way:

    ;WITH x AS
    (
        SELECT s.*, f.Item
            FROM #samp AS s
            CROSS APPLY dbo.SplitStrings(s.COMMASEPA, ',') AS f
    ), p AS 
    ( 
        SELECT x.COMMASEPA, 
            X = MAX(CASE WHEN x.Item LIKE 'X=%' THEN x.Item END),
            Y = MAX(CASE WHEN x.Item LIKE 'Y=%' THEN x.Item END),
            Z = MAX(CASE WHEN x.Item LIKE 'Z=%' THEN x.Item END),
            A = MAX(CASE WHEN x.Item LIKE 'A=%' THEN x.Item END),
            B = MAX(CASE WHEN x.Item LIKE 'B=%' THEN x.Item END),
            C = MAX(CASE WHEN x.Item LIKE 'C=%' THEN x.Item END),
            D = MAX(CASE WHEN x.Item LIKE 'D=%' THEN x.Item END)
        FROM x GROUP BY x.COMMASEPA
    )
    UPDATE s SET X = p.X, Y = p.Y, Z = p.Z, 
      A = p.A, B = p.B, C = p.C, D = p.D
    FROM #samp AS s INNER JOIN p 
    ON p.COMMASEPA = s.COMMASEPA;
    

提交回复
热议问题