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>


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow