пятница, 3 июля 2009 г.

MS SQL Function Split

Вариант реализации функции Split, которая разрезает строку на мини-таблицу, по умолчанию в качестве разделителя используется пробел.
CREATE FUNCTION [dbo].[fn_Split](
@text nvarchar(max),
@delimiter char(1) = ' '
)

RETURNS @Strings TABLE
(
position int IDENTITY PRIMARY KEY,
value nvarchar(max)
)
AS
BEGIN
DECLARE @INDEX int
SET @INDEX = -1
WHILE (LEN(@text) > 0)
BEGIN
SET @INDEX = CHARINDEX(@delimiter , @text)
IF (@INDEX = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@INDEX > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @INDEX - 1))
SET @text = RIGHT(@text, (LEN(@text) - @INDEX))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @INDEX))
END
RETURN
END
Пример:
SELECT * FROM [dbo].[fn_Split] (
'hello;world;split'
,';'
)
Результат:

positionVALUE
11hello
22world
33split

Комментариев нет:

Отправить комментарий