How to split a comma-separated value to columns

后端 未结 30 3946
刺人心
刺人心 2020-11-21 04:38

I have a table like this

Value   String
-------------------
1       Cleo, Smith

I want to separate the comma delimited string into two colu

30条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-21 04:56

    Your purpose can be solved using following query -

    Select Value  , Substring(FullName, 1,Charindex(',', FullName)-1) as Name,
    Substring(FullName, Charindex(',', FullName)+1, LEN(FullName)) as  Surname
    from Table1
    

    There is no readymade Split function in sql server, so we need to create user defined function.

    CREATE FUNCTION Split (
          @InputString                  VARCHAR(8000),
          @Delimiter                    VARCHAR(50)
    )
    
    RETURNS @Items TABLE (
          Item                          VARCHAR(8000)
    )
    
    AS
    BEGIN
          IF @Delimiter = ' '
          BEGIN
                SET @Delimiter = ','
                SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
          END
    
          IF (@Delimiter IS NULL OR @Delimiter = '')
                SET @Delimiter = ','
    
    --INSERT INTO @Items VALUES (@Delimiter) -- Diagnostic
    --INSERT INTO @Items VALUES (@InputString) -- Diagnostic
    
          DECLARE @Item           VARCHAR(8000)
          DECLARE @ItemList       VARCHAR(8000)
          DECLARE @DelimIndex     INT
    
          SET @ItemList = @InputString
          SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
          WHILE (@DelimIndex != 0)
          BEGIN
                SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
                INSERT INTO @Items VALUES (@Item)
    
                -- Set @ItemList = @ItemList minus one less item
                SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)-@DelimIndex)
                SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
          END -- End WHILE
    
          IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
          BEGIN
                SET @Item = @ItemList
                INSERT INTO @Items VALUES (@Item)
          END
    
          -- No delimiters were encountered in @InputString, so just return @InputString
          ELSE INSERT INTO @Items VALUES (@InputString)
    
          RETURN
    
    END -- End Function
    GO
    
    ---- Set Permissions
    --GRANT SELECT ON Split TO UserRole1
    --GRANT SELECT ON Split TO UserRole2
    --GO
    

提交回复
热议问题