Microsoft SQL Server
Delad strängfunktion i Sql Server
Sök…
Dela upp en sträng i Sql Server 2016
I SQL Server 2016 har de äntligen introducerat Split- STRING_SPLIT
: STRING_SPLIT
Parametrar: Det accepterar två parametrar
Sträng :
Är ett uttryck av vilken karaktärstyp som helst (dvs. nvarchar, varchar, nchar eller char).
separator :
Är ett enda teckenuttryck av vilken karaktärstyp som helst (t.ex. nvarchar (1), varchar (1), nchar (1) eller char (1)) som används som separator för sammankopplade strängar.
Obs: Du bör alltid kontrollera om uttrycket är en icke-tom sträng.
Exempel:
Select Value
From STRING_SPLIT('a|b|c','|')
I exemplet ovan
String : 'a|b|c'
separator : '|'
Resultat :
+-----+
|Value|
+-----+
|a |
+-----+
|b |
+-----+
|c |
+-----+
Om det är en tom sträng:
SELECT value
FROM STRING_SPLIT('',',')
Resultat :
+-----+
|Value|
+-----+
1 | |
+-----+
Du kan undvika situationen ovan genom att lägga till en WHERE
klausul
SELECT value
FROM STRING_SPLIT('',',')
WHERE LTRIM(RTRIM(value))<>''
Dela strängen i Sql Server 2008/2012/2014 med XML
Eftersom det inte finns någon STRING_SPLIT
funktion måste vi använda XML-hack för att dela strängen i rader:
Exempel:
SELECT split.a.value('.', 'VARCHAR(100)') AS Value
FROM (SELECT Cast ('<M>' + Replace('A|B|C', '|', '</M><M>')+ '</M>' AS XML) AS Data) AS A
CROSS apply data.nodes ('/M') AS Split(a);
Resultat:
+-----+
|Value|
+-----+
|A |
+-----+
|B |
+-----+
|C |
+-----+
T-SQL-tabellvariabel och XML
Declare @userList Table(UserKey VARCHAR(60))
Insert into @userList values ('bill'),('jcom'),('others')
--Declared a table variable and insert 3 records
Declare @text XML
Select @text = (
select UserKey from @userList for XML Path('user'), root('group')
)
--Set the XML value from Table
Select @text
--View the variable value
XML: \<group>\<user>\<UserKey>bill\</UserKey>\</user>\<user>\<UserKey>jcom\</UserKey>\</user>\<user>\<UserKey>others\</UserKey>\</user>\</group>