これを試してください:
CREATE FUNCTION [dbo].[SplitIndex](@Delimiter varchar(20) = ' ', @Search varchar(max), @index int)
RETURNS varchar(max)
AS
BEGIN
DECLARE @ix int,
@pos int,
@rt varchar(max)
DECLARE @tb TABLE (Val varchar(max), id int identity(1,1))
SET @ix = 1
SET @pos = 1
WHILE @ix <= LEN(@search) + 1 BEGIN
SET @ix = CHARINDEX(@Delimiter, @Search, @ix)
IF @ix = 0
SET @ix = LEN(@Search)
ELSE
SET @ix = @ix - 1
INSERT INTO @tb
SELECT SUBSTRING(@Search, @pos, @ix - @pos + 1)
SET @ix = @ix + 2
SET @pos = @ix
END
SELECT @Rt = Val FROM @Tb WHERE id = @index
RETURN @Rt
END
次のように使用します。
SELECT dbo.SplitIndex(' ', 'hello World', 1)
それを民主党の回答と組み合わせると、準備が整います
(指定されたインデックスが存在しない場合は NULL を返すことに注意してください)
例えば
SELECT dbo.SplitIndex(' ', 'Hello World', 3)
インデックス 3 が存在しないため、NULL を返します。
ただし、パフォーマンスがどのようなものかはわかりませんが、行ったテーブル値分割関数を変更しただけなので、MySql バージョンのように書き直す価値があるかもしれません