SQL Server自定义SplitString函数有几个拆分

时间:2010-02-24 11:41:27

标签: sql-server stored-procedures split

提前致谢!

我在SQL server 2008中有一个函数,它根据char我给出的字符串拆分字符串。可爱又简单。当我通过时:

Content1,Content2,Content3

我可以创建一个可爱的临时表,在单个列中用逗号(,)分隔这些值。

现在,这一切都很好,但我现在需要将以下内容拆分为一个表,但是有两列。 “名称”和“订单”

Content1:1,Content2:2,Content3:3 ...

任何人都有这样的事情吗?或者更好的传递数据的方法?如果没有,我将为每个项目运行一个单独的存储过程。我宁愿不。但如果必须,我必须!或者,从临时表创建一个临时表..我要说凌乱!

提前再次感谢。 詹姆斯

1 个答案:

答案 0 :(得分:1)

不确定你的原始分割功能是什么样的,但我无法想象它很难扩展它。

CREATE FUNCTION [dbo].[mysplit] ( @input nvarchar(MAX), @row_delimiter char(1), @col_delimiter char(1))
RETURNS @OutputTable TABLE ( [name] nvarchar(100), [order] nvarchar(100) )
AS
BEGIN

    declare 
      @str1 nvarchar(100)
    , @str2 nvarchar(100)
    , @tmpstr nvarchar(200)

    WHILE LEN(@input) > 0
    BEGIN
        set @tmpstr = LEFT(@input, ISNULL(NULLIF(CHARINDEX(@row_delimiter, @input) - 1, -1), LEN(@input)))                        
        set @str1 = LEFT(@tmpstr, ISNULL(NULLIF(CHARINDEX(@col_delimiter, @tmpstr) - 1, -1), LEN(@tmpstr)))
        set @str2 = SUBSTRING(@tmpstr,ISNULL(NULLIF(CHARINDEX(@col_delimiter, @tmpstr), 0), LEN(@tmpstr)) + 1, LEN(@tmpstr)) 
        set @input = SUBSTRING(@input,ISNULL(NULLIF(CHARINDEX(@row_delimiter, @input), 0), LEN(@input)) + 1, LEN(@input))
        INSERT INTO @OutputTable ( [name] , [order] )
        VALUES ( @str1 , @str2)
    END

    RETURN
END
GO

select * from mysplit('Content1:1,Content2:2,Content3:3', ',' , ':')