简体   繁体   中英

Split Delimited String into Columns in SQL Server

I want to split a string into columns. After using attached code I am getting NULL data. Could someone help on this issue please?

CREATE TABLE #custAddress13(
   rowdata VARCHAR(max)
);

INSERT INTO #custAddress13(rowdata)
VALUES('13946005|13946005|10266|10266|CENTRAL FURNITURE & APPLIANCES, INC.|273|DAVID LUCE|01|000||||26 RIVER ST||SANFORD|ME|04073-9999|United States|2073245474|2074905182|')


SELECT 
  REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 1)) AS [L1]
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 2)) AS [L2]
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 3)) AS L3
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 4)) AS L4
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 5)) AS L5
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 6)) AS L6
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 7)) AS L7
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 8)) AS L8
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 9)) AS L9
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 10)) AS L10
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 11)) AS L11
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 12)) AS L12
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 13)) AS L13
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 14)) AS L14
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 15)) AS L15
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 16)) AS L16
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 17)) AS L17
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 18)) AS L18
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 19)) AS L19
    , REVERSE(PARSENAME(REPLACE(REVERSE(RowDATA), '|', '.'), 20)) AS L20
FROM #custAddress13;
GO

You can use a bit a JSON

Example

Select L1  = JSON_VALUE(S,'$[0]')
      ,L2  = JSON_VALUE(S,'$[1]')
      ,L3  = JSON_VALUE(S,'$[2]')
      ,L4  = JSON_VALUE(S,'$[3]')
      ,L5  = JSON_VALUE(S,'$[4]')
      ,L6  = JSON_VALUE(S,'$[5]')  --<< Expand to L20 / $[19]
From #custAddress13 A
Cross Apply ( values ( '["'+replace(replace(A.rowdata,'"','\"'),'|','","')+'"]' ) ) B(S)

or dbFiddle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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