The purpose of split function (table valued function) is to split a delimited value into multiple values based on delimiter and display in tabular form.
split function takes two parameters
split function takes two parameters
- Delimited Value: The delimited value to be split in multiple values.
- Delimiter: The delimiter like comma, colon, semicolon, pipe etc. on the basis of which delimited value to be split.
and returns table of multiple values delimited on the basis of delimiter.
CREATE FUNCTION split( @delimited NVARCHAR(MAX), @delimiter NVARCHAR(100) ) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX)) AS BEGIN DECLARE @xml XML SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>' INSERT INTO @t(val) SELECT r.value('.','varchar(MAX)') as item FROM @xml.nodes('/t') as records(r) RETURN END
Step wise explanation of split Function
- Converting the delimited value into XML using replace function, where all delimiters are getting replaced with tag to make it as XML and assigning the same to XML Variable
- Reading the Node from XML variable and storing the values in table variable @t. Refer related blog post, XML Node into Tabular Form
- Returning the table variable @t
Let's take an example to split a comma delimited value into multiple values on the basis of delimiter (comma) using split function.
SELECT * FROM dbo.split('val1,val2,val3', ',')
Now let's take another example where you have multiple delimited value stored in a table against an ID and each value needs to split on the basis of delimiter. We would be using Cross Apply clause in the example. Refer related post, Apply Operator in SQL Server
DECLARE @TAB TABLE( id int, list varchar(100) ) INSERT INTO @TAB SELECT 1, 'apple;banana;grapes;orange' UNION ALL SELECT 2, 'potato;onion;carrot;brinjal' SELECT * FROM @TAB SELECT t.id, s.val FROM @TAB t CROSS APPLY dbo.split(t.list, ';') s
No comments :
Post a Comment