Here is the formatted (in the way I like) code:
DECLARE @Text NVARCHAR(500)
DECLARE @StringDelimiter CHAR
SELECT @Text = 'This t-sql will split these sentences into rows.' +
'How many rows will be returned?.' +
'M.a.y.b.e..n.o.n.e.?',
@StringDelimiter = '.'
;WITH Tally(Number) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Number
UNION ALL
SELECT Number + 1 AS Number
FROM Tally
WHERE Number <= LEN(@Text)
)
SELECT
CASE
WHEN RIGHT
( LEFT(@Text, Number),
CASE
WHEN CHARINDEX(@StringDelimiter, REVERSE(LEFT(@Text, Number - 1)), 0) > 0
THEN CHARINDEX(@StringDelimiter, REVERSE(LEFT(@Text, Number - 1)), 0) - 1
ELSE CHARINDEX(@StringDelimiter, REVERSE(LEFT(@Text, Number - 1)), 0)
END
) = ''
AND
CHARINDEX(@StringDelimiter, REVERSE(LEFT(@Text, Number - 1))) = 0
THEN LEFT (@Text, Number - 1)
ELSE
RIGHT
( LEFT(@Text, Number - 1),
CASE
WHEN CHARINDEX(@StringDelimiter, REVERSE(LEFT(@Text, Number - 1)), 0) > 0
THEN CHARINDEX(@StringDelimiter, REVERSE(LEFT(@Text, Number - 1)), 0) - 1
ELSE CHARINDEX(@STringDelimiter, REVERSE(LEFT(@Text, Number - 1)), 0)
END
)
END AS SPLIT
FROM Tally
WHERE (NCHAR(UNICODE(SUBSTRING(@Text, Number, 1))) = @StringDelimiter
OR Number - 1 = LEN(@Text))
OPTION(MAXRECURSION 32767);