Inhoudsopgave:
- Compatibiliteitsniveau van de database:
- Stel eerst de database in op “single_user_access_mode” door de volgende code te gebruiken
- Wijzig ten tweede het compatibiliteitsniveau van de database door de volgende code te gebruiken
- Zet de database terug in de toegangsmodus voor meerdere gebruikers door de volgende code te gebruiken
- Methode 2: Om de tekenreeks te splitsen, maakt u een door de gebruiker gedefinieerde tabelwaardefunctie
- Methode 3: Gebruik XQuery om de tekenreekswaarde te splitsen en de tekenreeks met scheidingstekens om te zetten in XML
Video: Hoe Een String Te Splitsen Door Een Scheidingsteken In SQL Server?
2024 Auteur: Kayla Nelson | [email protected]. Laatst gewijzigd: 2024-01-11 14:27
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')
Controleer of dat in de tabel is ingevoegd of gebruik de volgende code niet.
selecteer * van leerling
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' '
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:
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:
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.
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:
Als u het hele XML-bestand wilt bekijken. Klik op de link. Nadat u heeft geklikt, ziet de linkcode er als volgt uit.
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:
PDF's Splitsen / Annoteren En Samenvoegen In Chrome OS
Chromebooks zijn goedkoop en draagbaar en daarom bedoeld voor studenten die regelmatig met verschillende bestandsindelingen moeten werken. Dit kan nogal een zijn
Hoe PDF-bestanden Te Splitsen Met Chrome
Of u nu een student bent of een werknemer in het bedrijf, pdf's zijn overal. De meeste beschikbare boeken of essays zijn pdf's, dus het is belangrijk dat u weet hoe
Door Beveiligingslekken Door SQL-injectie In Seagate Personal Cloud Media Server Kunnen Privégegevens Worden Opgehaald
De Seagate Media Server is een UPnp / DLNA Network Attached Storage-mechanisme dat is opgenomen in de Seagate Personal Cloud voor gebruik op individueel niveau. In een
Cellen Splitsen In Microsoft Excel
Microsoft Excel is misschien wel het beste en meest gebruikte spreadsheetprogramma dat er is voor het Windows-besturingssysteem. Excel zit tot de nok toe vol
Hoe Los Ik De Fout Op 'Er Is Een Netwerkgerelateerde Of Instant-specifieke Fout Opgetreden Tijdens Het Tot Stand Brengen Van Een Verbinding Met SQL Server'?
“Er is een netwerkgerelateerde of instance-specifieke fout opgetreden bij het tot stand brengen van een verbinding met SQL Server. De server is niet gevonden of was niet toegankelijk