在不使用dbo.split的情况下,将逗号分隔的字符串转换为sql server 2008中的表或数组

时间:2015-10-01 13:01:51

标签: sql-server sql-server-2008-r2

如何在不使用dbo.split函数的情况下将逗号分隔的字符串转换为sql server 2008中的表或数组,因为系统不支持此函数?

例如字符串:’12,14,15’ 将其更改为

*Table column*
12
14
15

Or array=[12,14,15]

我想最终将逗号分隔的字符串值插入表中。 感谢

3 个答案:

答案 0 :(得分:3)

dbo.split可能是用户定义的函数,因此您需要定义它。否则,您可以使用XML + CROSS APPLY

<强> Demo

DECLARE @string NVARCHAR(100) = '12,14,15'


;WITH cte AS
(
   SELECT 

      CAST('<XMLRoot><RowData>' + REPLACE(t.val,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
      FROM (SELECT @string) AS t(val)
)
SELECT 
    m.n.value('.[1]','varchar(8000)')
FROM cte
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)

答案 1 :(得分:0)

如果您不想使用拆分,您可以创建自己的自定义功能来实现此目的。

请按照以下堆叠问题进行操作。

How to convert comma separated NVARCHAR to table records in SQL Server 2005?

以下链接涵盖了实现此目的的所有可能方式。

http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx

答案 2 :(得分:-1)

ALTER FUNCTION [dbo].[fnSplitString]  ( 
    @string NVARCHAR(MAX), 
    @delimiter CHAR(1)  
    )
    RETURNS
    @output TABLE(splitdata NVARCHAR(MAX)  ) 
    BEGIN 
    DECLARE @start INT, @end INT 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1
    BEGIN 
        IF @end = 0  
            SET @end = LEN(@string) + 1 

        INSERT INTO @output (splitdata)  
        VALUES(SUBSTRING(@string, @start, @end - @start)) 
        SET @start = @end + 1 
        SET @end = CHARINDEX(@delimiter, @string, @start) 

     END 
     RETURN  
     END