SQL Server : Split string to row

前端 未结 3 1034
一整个雨季
一整个雨季 2020-12-18 14:34

How to turn data from below:

CODE COMBINATION   USER
1111.111.11.0      KEN; JIMMY
666.778.0.99       KEN
888.66.77.99       LIM(JIM); JIMMY
<
3条回答
  •  渐次进展
    2020-12-18 14:54

    If your [USER] column only has one semicolon you don't need a "split string" function at all; you could use CROSS APPLY like this:

    -- Your Sample data 
    DECLARE @table TABLE (CODE_COMBINATION varchar(30), [USER] varchar(100));
    INSERT @table
    VALUES ('1111.111.11.0', 'KEN; JIMMY'), ('666.778.0.99', 'XKEN'),
           ('888.66.77.99','LIM(JIM); JIMMY');
    
    -- Solution using only CROSS APPLY
    SELECT CODE_COMBINATION, [USER] = LTRIM(s.s)
    FROM @table t
    CROSS APPLY (VALUES (CHARINDEX(';',t.[USER]))) d(d)
    CROSS APPLY 
    (
      SELECT SUBSTRING(t.[USER], 1, ISNULL(NULLIF(d.d,0),1001)-1)
      UNION ALL
      SELECT SUBSTRING(t.[USER], d.d+1, 1000)
      WHERE d.d > 0
    ) s(s);
    

    If you do need a pre SQL Server 2016 "split string" function I would strongly suggest using Jeff Moden's DelimitedSplit8k or Eirikur Eiriksson's DelimitedSplit8K_LEAD. Both of these will outperform an XML-based or recursice CTE "split string" function.

提交回复
热议问题