【发布时间】:2012-11-07 15:57:28
【问题描述】:
这里建议的内联解决方案:vzczc 的 How do I split a string so I can access item x? 仅适用于包含少于 100 个元素的字符串,因为存在递归深度的限制(您无法更改 UDF 内的限制)。
还有其他方法可以分割长字符串并具有良好的性能吗?我一直在使用的UDF(不是内联的)非常慢:
CREATE FUNCTION [dbo].[fn_ParseDelimitedStrings](@String nvarchar(MAX), @Delimiter char(1))
RETURNS @Values TABLE
(
RowId int Not Null IDENTITY(1,1) PRIMARY KEY
,Value nvarchar(255) Not Null
)
AS
BEGIN
DECLARE @startPos smallint
,@endPos smallint
IF (@String = '')
RETURN
IF (RIGHT(@String, 1) != @Delimiter)
SET @String = @String + @Delimiter
SET @startPos = 1
SET @endPos = CharIndex(@Delimiter, @String)
WHILE @endPos > 0
BEGIN
INSERT @Values(Value)
SELECT LTRIM(RTRIM(SUBSTRING(@String, @startPos, @endPos - @startPos)))
-- remove the delimiter just used
SET @String = STUFF(@String, @endPos, 1, '')
-- move string pointer to next delimiter
SET @startPos = @endPos
SET @endPos = CHARINDEX(@Delimiter, @String)
END
RETURN
END
【问题讨论】:
-
有大量的问题/答案来解决这个问题。你试过this solution using XML。
标签: sql sql-server-2008 user-defined-functions