Logo nl.nowadaytechnol.com

Hoe Een String Te Splitsen Door Een Scheidingsteken In SQL Server?

Inhoudsopgave:

Hoe Een String Te Splitsen Door Een Scheidingsteken In SQL Server?
Hoe Een String Te Splitsen Door Een Scheidingsteken In SQL Server?

Video: Hoe Een String Te Splitsen Door Een Scheidingsteken In SQL Server?

Video: Hoe Een String Te Splitsen Door Een Scheidingsteken In SQL Server?
Video: String Split Function in SQL Server | String_split in SQL server 2024, Maart
Anonim

In dit artikel bespreken we verschillende manieren om de gescheiden tekenreekswaarde te splitsen. Het kan worden bereikt met behulp van meerdere methoden, waaronder.

  • Gebruik van de STRING_SPLIT-functie om de string te splitsen
  • Maak een door de gebruiker gedefinieerde tabelwaardefunctie om de string te splitsen,
  • Gebruik XQuery om de tekenreekswaarde te splitsen en de tekenreeks met scheidingstekens om te zetten in XML

Allereerst moeten we een tabel maken en daarin gegevens invoegen die in alle drie de methoden zullen worden gebruikt. De tabel moet een enkele rij bevatten met veld-id en een tekenreeks met scheidingstekens erin. Maak een tabel met de naam "student" met de volgende code.

CREATE TABLE student (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))

Voeg studentnamen in, gescheiden door komma's, in een enkele rij door de volgende code uit te voeren.

INVOEGEN IN student (student_name) WAARDEN ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')

Image
Image

Controleer of dat in de tabel is ingevoegd of gebruik de volgende code niet.

selecteer * van leerling

Image
Image

Methode 1: gebruik de functie STRING_SPLIT om de tekenreeks te splitsen

In SQL Server 2016, "STRING_SPLIT" functie geïntroduceerd die kan worden gebruikt met compatibiliteitsniveau 130 en hoger. Als u de 2016 SQL Server-versie of hoger gebruikt, kunt u deze ingebouwde functie gebruiken.

Verder "STRING_SPLIT" voert een tekenreeks in die subtekenreeksen heeft gescheiden en voert één teken in om als scheidingsteken of scheidingsteken te gebruiken. De functie voert een tabel met één kolom uit waarvan de rijen de subtekenreeksen bevatten. De naam van de uitvoerkolom is “ Waarde". Deze functie krijgt twee parameters. De eerste parameter is string en de tweede is een scheidingsteken of scheidingsteken op basis waarvan we de string moeten splitsen. De uitvoer bevat een tabel met één kolom waarin subtekenreeksen aanwezig zijn. Deze uitvoerkolom heeft de naam "Waarde" zoals we kunnen zien in de onderstaande afbeelding. Bovendien is de "STRING SPLIT" table_valued functie retourneert een lege tabel als de invoertekenreeks NULL is.

Compatibiliteitsniveau van de database:

Elke database is verbonden met compatibiliteitsniveau. Het zorgt ervoor dat het gedrag van de database compatibel is met de specifieke SQL Server-versie waarop deze wordt uitgevoerd.

Nu zullen we de functie "string_split" aanroepen om een string te splitsen die wordt gescheiden door komma's. Maar het compatibiliteitsniveau was minder dan 130 en daarom werd de volgende fout verhoogd. 'Ongeldige objectnaam ‘SPLIT_STRING' '

Image
Image

Daarom moeten we het compatibiliteitsniveau van de database instellen op 130 of hoger. We zullen deze stap dus volgen om het compatibiliteitsniveau van de database in te stellen.

Stel eerst de database in op “single_user_access_mode” door de volgende code te gebruiken

ALTER DATABASE SET SINGLE_USER

Wijzig ten tweede het compatibiliteitsniveau van de database door de volgende code te gebruiken

ALTER DATABASE SET COMPATIBILITY_LEVEL = 130

Zet de database terug in de toegangsmodus voor meerdere gebruikers door de volgende code te gebruiken

ALTER DATABASE SET MULTI_USER

GEBRUIK [master] GO ALTER DATABASE [bridge_centrality] SET SINGLE_USER ALTER DATABASE [bridge_centrality] SET COMPATIBILITY_LEVEL = 130 ALTER DATABASE [bridge_centrality] SET MULTI_USER GO

De output zal zijn:

Image
Image

Voer nu deze code uit om het vereiste resultaat te krijgen.

DECLARE @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' SELECT * FROM STRING_SPLIT (@string_value, ',')

De uitvoer voor deze zoekopdracht is:

Image
Image

Methode 2: Om de tekenreeks te splitsen, maakt u een door de gebruiker gedefinieerde tabelwaardefunctie

Deze traditionele methode wordt zeker ondersteund door alle versies van SQL Server. In deze techniek zullen we een door de gebruiker gedefinieerde functie maken om de tekenreeks te splitsen door een scheidingsteken met behulp van “ONDERGROND "Functie," CHARINDEX ”En while-lus. Deze functie kan worden gebruikt om dat toe te voegen aan de uitvoertabel, aangezien het retourtype "table" is.

FUNCTIE CREËREN [dbo]. [Split_string] (@string_value NVARCHAR (MAX), @delimiter_character CHAR (1)) RETURNS @result_set TABLE (splited_datNVARCHAR (MAX)) BEGIN DECLARE @start_position INT, @ending_position INT SELECT @start_position = 1, ending_position = CHARINDEX (@delimiter_character, @string_value) WHILE @start_position <LEN (@string_value) + 1 BEGIN IF @ending_position = 0 SET @ending_position = LEN (@string_value) + 1 INSERT IN @result_set (splited_data) VALUES (SUBSTRING string_value, @start_position, @ending_position - @start_position)) SET @start_position = @ending_position + 1 SET @ending_position = CHARINDEX (@delimiter_character, @string_value, @start_position) END RETURN END

Voer nu het onderstaande script uit om de split-functie aan te roepen om de tekenreeks op scheidingsteken te splitsen.

DECLARE @student_name VARCHAR (MAX); DECLARE @delimiter CHAR (1); SET @ delimiter = ',' SET @student_name = (SELECT student_name FROM student) SELECT * FROM dbo.split_string (@student_name, @delimiter)

De resultaatset zal er zo uitzien.

Image
Image

Methode 3: Gebruik XQuery om de tekenreekswaarde te splitsen en de tekenreeks met scheidingstekens om te zetten in XML

Aangezien door de gebruiker gedefinieerde functies uitputtend zijn in de bronnen, moeten we deze functies vermijden. Een andere optie is de ingebouwde "string_split" -functie, maar deze functie kan worden gebruikt voor databases waarvoor het compatibiliteitsniveau 130 of hoger is. Dus hier komt een andere oplossing om deze moeilijke taak op te lossen. tekenreeks kan worden gesplitst met behulp van het volgende XML.

DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECTEER studentnaam VAN student) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Vervangen (@string_value, @delimiter_value, '') + '') AS XML) SELECT @xml_value

De output voor deze query is:

Image
Image

Als u het hele XML-bestand wilt bekijken. Klik op de link. Nadat u heeft geklikt, ziet de linkcode er als volgt uit.

Image
Image

Nu moet de XML-string verder worden verwerkt. Ten slotte zullen we “x-Query” gebruiken om te zoeken vanuit de XML.

DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (SELECTEER studentnaam VAN student) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Vervangen (@string_value, @delimiter_value, '') + '') AS XML) SELECT xmquery ('.'). value ('.', 'VARCHAR (15)') AS VALUE FROM @ xml_value.nodes ('/ studentname') ALS x (m)

De output zal als volgt zijn:

Aanbevolen: