Hur delar jag en sträng med en avgränsad siffra i SQL Server?
I den här artikeln kommer vi att diskutera flera sätt att dela upp det avgränsade strängvärdet. Det kan uppnås med flera metoder inklusive.
- Användning av STRING_SPLIT-funktionen för att dela upp strängen
- Skapa en användardefinierad tabellvärderad funktion för att dela strängen,
- Använd XQuery för att dela upp strängvärdet och omvandla en avgränsad sträng till XML
Först och främst måste vi skapa en tabell och infoga data i den som kommer att användas i alla tre metoderna. Tabellen ska innehålla en rad med fält-id och sträng med avgränsningstecken. Skapa en tabell med namnet "student" med hjälp av följande kod.
SKAPA TABELLstudent (ID INT IDENTITET (1, 1), studentnamn VARCHAR (MAX))
Infoga elevnamn åtskilda av komma i en rad genom att köra följande kod.
INSÄTTA I student (studentnamn) VÄRDEN ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')
Kontrollera om data har infogats i tabellen eller inte använder följande kod.
välj * från studenten
Metod 1: Använd STRING_SPLIT-funktionen för att dela upp strängen
I SQL Server 2016, “STRING_SPLIT” funktionen introducerades som kan användas med kompatibilitetsnivå 130 och högre. Om du använder 2016 SQL Server-versionen eller senare kan du använda den här inbyggnadsfunktionen.
dessutom “STRING_SPLIT” matar in en sträng som har avgränsat understrängar och inmatat ett tecken som ska användas som avgränsare eller separator. Funktionen matar ut en enkolonnstabell vars rader innehåller understrängarna. Namnet på utgångskolumnen är “Värde". Denna funktion får två parametrar. Den första parametern är en sträng och den andra är avgränsningstecken eller separator baserat på vilken vi måste dela strängen. Utgången innehåller en enkolonnstabell där underlag finns. Denna utgångskolumn heter "Värde" som vi kan se i figuren nedan. Dessutom har “STRING SPLIT” table_valued-funktionen returnerar en tom tabell om inmatningssträngen är NULL.
Databasens kompatibilitetsnivå:
Varje databas är ansluten till en kompatibilitetsnivå. Det gör att databasens beteende kan vara kompatibelt med den specifika SQL Server-versionen den körs på.
Nu kommer vi att kalla funktionen "string_split" för att dela strängen avgränsad med komma. Men kompatibilitetsnivån var mindre än 130 och följaktligen höjdes följande fel. "Ogiltigt objektnamn" SPLIT_STRING ""
Därför måste vi ställa in databaskompatibilitetsnivån till 130 eller högre. Så vi kommer att följa dessa steg för att ställa in kompatibilitetsnivån för databasen.
- Först och främst ställ in databasen till “single_user_access_mode” med hjälp av följande kod.
ALTER DATABAS <[database_name]> SET SINGLE_USER
- För det andra, ändra kompatibilitetsnivån för databasen med hjälp av följande kod.
ALTER DATABAS <[database_name]> SET COMPATIBILITY_LEVEL = 130
- Sätt tillbaka databasen till fleranvändarläge genom att använda följande kod.
ALTER DATABAS <[database_name]> SET MULTI_USER
ANVÄNDA [master] GO ALTER DATABAS [bridge_centrality] SET SINGLE_USER ALTER DATABASE [bridge_centralality] SET COMPATIBILITY_LEVEL = 130 ALTER DATABAS [bridge_centralality] SET MULTI_USER GO
Resultatet blir:
Kör nu den här koden för att få önskat resultat.
FÖRKLARA @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' SELECT * FRÅN STRING_SPLIT (@string_value, ',')
Output för denna fråga kommer att vara:
Metod 2: För att dela strängen skapar du en användardefinierad tabellvärderad funktion
Visst stöds denna traditionella metod av alla versioner av SQL Server. I den här tekniken skapar vi användardefinierad funktion för att dela strängen med avgränsat tecken med hjälp av “SUBSTRING”Funktion,“CHARINDEX”Och medan loop. Denna funktion kan användas för att lägga till data i utgångstabellen eftersom dess returtyp är "tabell".
SKAPA FUNKTION [dbo]. [Split_string] (@string_value NVARCHAR (MAX), @delimiter_character CHAR (1)) RETURNS @result_set TABELL (splited_data NVARCHAR (MAX)) BEGIN DECLARE @ start_position INT, @ending_position INT SELECT @ start_position = @ending_position = CHARINDEX (@delimiter_character, @string_value) WHILE @ start_positionKör nu skriptet nedan för att kalla en delad funktion till delad sträng med avgränsningstecken.
FÖRKLARA @student_name VARCHAR (MAX); FÖRKLARA @delimiter CHAR (1); SET @ delimiter = ',' SET @student_name = (VÄLJ studentnamn FRÅN student) VÄLJ * FRÅN dbo.split_string (@student_name, @delimiter)Resultatuppsättningen blir så här.
Metod 3: Använd XQuery för att dela upp strängvärdet och omvandla en avgränsad sträng till XML
Eftersom användardefinierade funktioner är uttömmande resurser måste vi undvika dessa funktioner. Ett annat alternativ är inbyggd "string_split" -funktion men den här funktionen kan användas för databaser där kompatibilitetsnivån är 130 eller högre. Så här kommer en annan lösning för att lösa denna svåra uppgift. En sträng kan delas med hjälp av följande XML.
DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (VÄLJ studentnamn FRÅN student) SET @delimiter_value = ',' SET @xml_value = Cast ((''+ Ersätt (@string_value, @delimiter_value,' ') + ' ') AS XML) VÄLJ @xml_valueResultatet för denna fråga kommer att vara:
Om du vill visa hela XML-filen. Klicka på länken. När du har klickat kommer länkkoden att se ut så här.
Nu ska XML-strängar behandlas vidare. Slutligen kommer vi att använda "x-Query" för att fråga från XML.
DEKLARERA @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECT student_name FROM student) SET @delimiter_value = ',' SET @xml_value = Cast ((''+ Ersätt (@string_value, @delimiter_value,' ') + ' ') AS XML) VÄLJ x.m.fråga ('. '). Värde ('. ',' VARCHAR (15) ') SOM VÄRDE FRÅN @ xml_value.nodes (' / studentnamn ') AS x (m)Resultatet blir så här: