Here is how I have approached this in pre-string_split days, by converting the list to an XML string and then using SQL Server's XML support.
DECLARE @list varchar(255) = 'value1,value2,value3,value4,value5';
SELECT
x.f.value( '.', 'varchar(50)' ) AS [value]
FROM (
SELECT CAST ( '<v><i>' + REPLACE ( @list, ',', '</i><i>' ) + '</i></v>' AS xml ) AS x
) AS d
CROSS APPLY x.nodes( '//v/i' ) x( f );
RETURNS
+--------+
| value |
+--------+
| value1 |
| value2 |
| value3 |
| value4 |
| value5 |
+--------+
You could convert this into an inline table-valued-function:
CREATE OR ALTER FUNCTION dbo.my_string_split (
@list varchar(1000), @delim varchar(1) = ','
)
RETURNS TABLE
AS
RETURN (
SELECT
x.f.value( '.', 'varchar(50)' ) AS [value]
FROM (
SELECT CAST ( '<v><i>' + REPLACE ( @list, @delim, '</i><i>' ) + '</i></v>' AS xml ) AS x
) AS d
CROSS APPLY x.nodes( '//v/i' ) x( f )
)
GO
To call it:
SELECT * FROM dbo.my_string_split( 'value1,value2,value3,value4,value5', ',' );