Logo ro.nowadaytechnol.com

Cum Se împarte Un șir De Un Caracter Delimitat în SQL Server?

Cuprins:

Cum Se împarte Un șir De Un Caracter Delimitat în SQL Server?
Cum Se împarte Un șir De Un Caracter Delimitat în SQL Server?

Video: Cum Se împarte Un șir De Un Caracter Delimitat în SQL Server?

Video: Cum Se împarte Un șir De Un Caracter Delimitat în SQL Server?
Video: Администрирование SQL Server ч.1. Базы данных. 2024, Martie
Anonim

În acest articol, vom discuta mai multe modalități de a împărți valoarea șirului delimitat. Poate fi realizat folosind mai multe metode, inclusiv.

  • Utilizarea funcției STRING_SPLIT pentru a împărți șirul
  • Creați funcția de tabelă definită de utilizator pentru a împărți șirul,
  • Utilizați XQuery pentru a împărți valoarea șirului și a transforma șirul delimitat în XML

În primul rând, trebuie să creăm tabel și să inserăm date în acesta, care vor fi utilizate în toate cele trei metode. Tabelul trebuie să conțină un singur rând cu ID câmp și șir cu caractere delimitatoare în el. Creați un tabel numit „student” folosind următorul cod.

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

Introduceți numele studenților separați prin virgule într-un singur rând executând următorul cod.

INSERT INTO student (student_name) VALORI („Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad”)

Image
Image

Verificați dacă datele au fost inserate în tabel sau nu folosind următorul cod.

selectați * din student

Image
Image

Metoda 1: utilizați funcția STRING_SPLIT pentru a împărți șirul

În SQL Server 2016, „STRING_SPLIT” a fost introdusă funcția care poate fi utilizată cu nivelul de compatibilitate 130 și mai mare. Dacă utilizați versiunea 2016 SQL Server sau o versiune ulterioară, puteți utiliza această funcție de încorporare.

În plus „STRING_SPLIT” șir de intrări care are sub-șiruri delimitate și introduce un caracter de utilizat ca delimitator sau separator. Funcția redă tabelul cu o singură coloană ale cărui rânduri conțin șirurile secundare. Numele coloanei de ieșire este „ Valoare". Această funcție primește doi parametri. Primul parametru este șir, iar al doilea este caracterul delimitator sau separatorul pe baza căruia trebuie să împărțim șirul. Ieșirea conține un tabel cu o singură coloană în care sunt prezente șiruri de caractere. Această coloană de ieșire este denumită "Valoare" după cum putem vedea în figura de mai jos. Mai mult, „STRING SPLIT” funcția table_valued returnează un tabel gol dacă șirul de intrare este NULL.

Nivelul de compatibilitate al bazei de date:

Fiecare bază de date este conectată la nivel de compatibilitate. Permite comportamentul bazei de date să fie compatibil cu versiunea specială SQL Server pe care rulează.

Acum vom apela funcția „string_split” pentru a împărți șirul delimitat de virgule. Dar nivelul de compatibilitate a fost mai mic de 130, prin urmare a fost ridicată următoarea eroare. „Numele obiectului este nevalid‘ SPLIT_STRING ’”

Image
Image

Astfel, trebuie să setăm nivelul de compatibilitate a bazei de date la 130 sau mai mult. Deci, vom urma acești pași pentru a seta nivelul de compatibilitate al bazei de date.

În primul rând, setați baza de date la „single_user_access_mode” utilizând următorul cod

ALTER SET BAZA DE DATE SET SINGLE_USER

În al doilea rând, modificați nivelul de compatibilitate al bazei de date utilizând următorul cod

ALTER DATABASE SET COMPATIBILITY_LEVEL = 130

Puneți baza de date înapoi în modul de acces cu mai mulți utilizatori utilizând următorul cod

ALTER SETARE BAZA DE DATE SET MULTI_USER

USE [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

Ieșirea va fi:

Image
Image

Acum executați acest cod pentru a obține rezultatul necesar.

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

Rezultatul pentru această interogare va fi:

Image
Image

Metoda 2: Pentru a împărți șirul, creați o funcție de tabelă definită de utilizator

Cu siguranță, această metodă tradițională este acceptată de toate versiunile SQL Server. În această tehnică vom crea o funcție definită de utilizator pentru a împărți șirul de caractere delimitate folosind „ SUBSTRING "Funcție" CHARINDEX ”Și while loop. Această funcție poate fi utilizată pentru a adăuga date la tabelul de ieșire, deoarece tipul său de returnare este „tabel”.

CREATE FUNCTION [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 INTO @result_set (splited_data) VALUES (SUB 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

Acum executați scriptul de mai jos pentru a apela funcția de împărțire pentru a împărți șirul după caracterul delimitator.

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

Setul de rezultate va fi așa.

Image
Image

Metoda 3: Utilizați XQuery pentru a împărți valoarea șirului și a transforma șirul delimitat în XML

Deoarece funcțiile definite de utilizator sunt exhaustive din resurse, trebuie să evităm aceste funcții. O altă opțiune este funcția încorporată „string_split”, dar această funcție poate fi utilizată pentru baza de date pentru care nivelul de compatibilitate este de 130 sau mai mare. Așa că vine o altă soluție pentru a rezolva această sarcină dificilă. șirul poate fi împărțit folosind următoarele XML.

DECLARA @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 (('' + Înlocuiți (@string_value, @delimiter_value, '') + '') AS XML) SELECT @xml_value

Rezultatul pentru această interogare va fi:

Image
Image

Dacă doriți să vizualizați întregul fișier XML. Apasa pe link. Odată ce ați făcut clic, codul link-ului va arăta astfel.

Image
Image

Acum șirul XML ar trebui procesat în continuare. În cele din urmă, vom folosi „x-Query” pentru a interoga din XML.

DECLARA @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 (('' + Înlocuiți (@string_value, @delimiter_value, '') + '') AS XML) SELECT xmquery ('.'). value ('.', 'VARCHAR (15)') AS VALUE FROM @ xml_value.nodes ('/ studentname') AS x (m)

Rezultatul va fi astfel:

Recomandat: