SQL Server 2008从记录中的字段拆分字符串

时间:2011-01-10 16:53:23

标签: sql-server tsql sql-server-2008

我的数据集如下所示(输入)。

IR#   CR#
1     1,2
2     3
3     4,5,6

我想要以下输出。您可以在此示例中考虑所有字段varchar。

IR#   CR#
1     1
1     2
2     3
3     4
3     5
3     6

我有UDF将CSV字符串拆分成行......但是不能将表中的1行拆分成多行,然后联合将下一行等等。

谢谢!

1 个答案:

答案 0 :(得分:1)

CROSS APPLY与拆分UDF结合使用。我用于示例的字符串拆分器来自here

/* Create function for purposes of demo */
CREATE FUNCTION [dbo].[fnParseStringTSQL] (@string NVARCHAR(MAX),@separator NCHAR(1))
RETURNS @parsedString TABLE (string NVARCHAR(MAX))
AS 
BEGIN
   DECLARE @position int
   SET @position = 1
   SET @string = @string + @separator
   WHILE charindex(@separator,@string,@position) <> 0
      BEGIN
         INSERT into @parsedString
         SELECT substring(@string, @position, charindex(@separator,@string,@position) - @position)
         SET @position = charindex(@separator,@string,@position) + 1
      END
     RETURN
END
go

/* Set up sample data */
declare @t table (
    IR int,
    CR varchar(100)
)

insert into @t
    (IR, CR)
    select 1, '1,2' union all
    select 2, '3' union all
    select 3, '4,5,6'

/* Here's the query that solves the problem */
select t.IR, p.string
    from @t t
        cross apply [dbo].[fnParseStringTSQL](t.CR,',') p


/* clean up after demo */
drop function [dbo].[fnParseStringTSQL]