为了账号安全,请及时绑定邮箱和手机立即绑定

如何将逗号分隔值拆分为列

如何将逗号分隔值拆分为列

倚天杖 2019-05-29 15:36:46
如何将逗号分隔值拆分为列我有一张这样的桌子Value   String-------------------1       Cleo, Smith我想将逗号分隔的字符串分成两列Value  Name Surname-------------------1      Cleo   Smith我只需要两个固定的额外列
查看完整描述

4 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

CREATE FUNCTION [dbo].[fn_split_string_to_column] (
    @string NVARCHAR(MAX),
    @delimiter CHAR(1)
    )RETURNS @out_put TABLE (
    [column_id] INT IDENTITY(1, 1) NOT NULL,
    [value] NVARCHAR(MAX)
    )ASBEGIN
    DECLARE @value NVARCHAR(MAX),
        @pos INT = 0,
        @len INT = 0

    SET @string = CASE 
            WHEN RIGHT(@string, 1) != @delimiter                THEN @string + @delimiter            ELSE @string            END

    WHILE CHARINDEX(@delimiter, @string, @pos + 1) > 0
    BEGIN
        SET @len = CHARINDEX(@delimiter, @string, @pos + 1) - @pos        SET @value = SUBSTRING(@string, @pos, @len)

        INSERT INTO @out_put ([value])
        SELECT LTRIM(RTRIM(@value)) AS [column]

        SET @pos = CHARINDEX(@delimiter, @string, @pos + @len) + 1
    END

    RETURNEND


查看完整回答
反对 回复 2019-05-29
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您的目的可以使用以下查询解决 -


Select Value  , Substring(FullName, 1,Charindex(',', FullName)-1) as Name,

Substring(FullName, Charindex(',', FullName)+1, LEN(FullName)) as  Surname

from Table1

在sql server中没有现成的Split函数,所以我们需要创建用户定义的函数。


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


查看完整回答
反对 回复 2019-05-29
  • 4 回答
  • 0 关注
  • 736 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号