Split String function in Sql Server
Split string in Sql Server 2008/2012/2014 using XML
Section titled “Split string in Sql Server 2008/2012/2014 using XML”Since there is no STRING_SPLIT function we need to use XML hack to split the string into rows:
Example:
SELECT split.a.value('.', 'VARCHAR(100)') AS ValueFROM (SELECT Cast ('<M>' + Replace('A|B|C', '|', '</M><M>')+ '</M>' AS XML) AS Data) AS A CROSS apply data.nodes ('/M') AS Split(a);Result:
+-----+|Value|+-----+|A |+-----+|B |+-----+|C |+-----+Split a String in Sql Server 2016
Section titled “Split a String in Sql Server 2016”In SQL Server 2016 finally they have introduced Split string function : STRING_SPLIT
Parameters: It accepts two parameters
String:
Is an expression of any character type (i.e. nvarchar, varchar, nchar or char).
separator :
Is a single character expression of any character type (e.g. nvarchar(1), varchar(1), nchar(1) or char(1)) that is used as separator for concatenated strings.
Note: You should always check if the expression is a non-empty string.
Example:
Select ValueFrom STRING_SPLIT('a|b|c','|')In above example
String : 'a|b|c'separator : '|'Result :
+-----+|Value|+-----+|a |+-----+|b |+-----+|c |+-----+If it’s an empty string:
SELECT valueFROM STRING_SPLIT('',',')Result :
+-----+ |Value| +-----+1 | | +-----+You can avoid the above situation by adding a WHERE clause
SELECT valueFROM STRING_SPLIT('',',')WHERE LTRIM(RTRIM(value))<>''T-SQL Table variable and XML
Section titled “T-SQL Table variable and XML”Declare @userList Table(UserKey VARCHAR(60))Insert into @userList values ('bill'),('jcom'),('others')--Declared a table variable and insert 3 records
Declare @text XMLSelect @text = ( select UserKey from @userList for XML Path('user'), root('group'))--Set the XML value from Table
Select @text
--View the variable valueXML: \<group>\<user>\<UserKey>bill\</UserKey>\</user>\<user>\<UserKey>jcom\</UserKey>\</user>\<user>\<UserKey>others\</UserKey>\</user>\</group>