Вариант реализации функции 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' ,';' )
Результат:
position | VALUE | |
1 | 1 | hello |
2 | 2 | world |
3 | 3 | split |