How Do I Split a Delimited String in SQL Server Without Creating a Function?

前端 未结 11 1727
慢半拍i
慢半拍i 2020-11-29 08:28

I\'m working with a SQL Server database. I have a column which contains a delimited list, and I need to write a query which splits the values of the list into rows. From bro

11条回答
  •  死守一世寂寞
    2020-11-29 09:09

    USE TRIAL
    GO
    
    CREATE TABLE DETAILS
    (
    ID INT,
    NAME VARCHAR(50),
    ADDRESS VARCHAR(50)
    )
    
    INSERT INTO DETAILS
    VALUES (100, 'POPE-JOHN-PAUL','VATICAN CIT|ROME|ITALY')
    ,(240, 'SIR-PAUL-McARTNEY','NEWYORK CITY|NEWYORK|USA')
    ,(460,'BARRACK-HUSSEIN-OBAMA','WHITE HOUSE|WASHINGTON|USA')
    ,(700, 'PRESIDENT-VLADAMIR-PUTIN','RED SQUARE|MOSCOW|RUSSIA')
    ,(950, 'NARENDRA-DAMODARDAS-MODI','10 JANPATH|NEW DELHI|INDIA')
    
    select [ID]
    ,[NAME]
    ,[ADDRESS]
    ,REPLACE(LEFT(NAME, CHARINDEX('-', NAME)),'-',' ') as First_Name
    ,CASE 
    WHEN CHARINDEX('-',REVERSE(NAME))+ CHARINDEX('-',NAME) < LEN(NAME)
    THEN  SUBSTRING(NAME, CHARINDEX('-', (NAME)) + 1, LEN(NAME) - CHARINDEX('-' 
    , REVERSE(NAME)) - CHARINDEX('-', NAME))
      ELSE 'NULL
      END AS Middle_Name
    ,REPLACE(REVERSE( SUBSTRING( REVERSE(NAME), 1, CHARINDEX('- 
    ',REVERSE(NAME)))), '-','') AS Last_Name 
    ,REPLACE(LEFT(ADDRESS, CHARINDEX('|', ADDRESS)),'|',' ') AS Locality
    ,CASE 
        WHEN CHARINDEX('|',REVERSE(ADDRESS))+ CHARINDEX('|',ADDRESS) < 
      LEN(ADDRESS) 
     THEN SUBSTRING(ADDRESS, CHARINDEX('|', (ADDRESS))+1, LEN(ADDRESS)- 
    CHARINDEX('|', REVERSE(ADDRESS))-CHARINDEX('|',ADDRESS))
      ELSE 'Null' 
    END AS STATE
    ,REPLACE(REVERSE(SUBSTRING(REVERSE(ADDRESS),1 
    ,CHARINDEX('|',REVERSE(ADDRESS)))),'|','') AS Country
     FROM DETAILS
      SELECT CHARINDEX('-', REVERSE(NAME)) AS LAST,CHARINDEX('-',NAME)AS FIRST, 
     LEN(NAME) AS LENGTH
     FROM DETAILS
    

    -- LET ME KNOW IF YOU HAVE DOUBTS UNDERSTANDING THE CODE

提交回复
热议问题