Hoe een string te splitsen door een scheidingsteken in SQL Server?



Probeer Ons Instrument Voor Het Oplossen Van Problemen

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 functie met tabelwaarde om de string te splitsen,
  • Gebruik XQuery om de tekenreekswaarde te splitsen en een tekenreeks met scheidingstekens om te zetten in XML

Allereerst moeten we een tabel maken en er gegevens in 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')

Tabel maken en gegevens invoegen

Controleer of er gegevens in de tabel zijn ingevoegd of gebruik de volgende code niet.

selecteer * van leerling

Controleer of er gegevens zijn ingevoegd in de 'leerling' -tabel



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 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 een 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:

Elkdatabaseisverbondenmetnaarcompatibiliteitniveau.Hetmaakt het mogelijkdedatabase’sgedragnaarwordenverenigbaarmet ThisbijzonderSQLServerversiehetlooptAan.

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

Er treedt een fout op als het compatibiliteitsniveau van de database lager is dan 130 'Ongeldige objectnaam split_string'

Daarom moeten we het compatibiliteitsniveau van de database instellen op 130 of hoger. Dus we zullen deze stap 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 met behulp van de volgende code.
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:

Verander het compatibiliteitsniveau naar 130

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,