如何在不使用dbo.split函数的情况下将逗号分隔的字符串转换为sql server 2008中的表或数组,因为系统不支持此函数?
例如字符串:’12,14,15’
将其更改为
*Table column*
12
14
15
Or array=[12,14,15]
我想最终将逗号分隔的字符串值插入表中。 感谢
答案 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