Cum se împarte un șir de un caracter delimitat în SQL Server?



Încercați Instrumentul Nostru Pentru Eliminarea Problemelor

Î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 o funcție de tabelă definită de utilizator pentru a împărți șirul,
  • Utilizați XQuery pentru a împărți valoarea șirului și a transforma un șir delimitat în XML

În primul rând, trebuie să creăm un 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) VALORES („Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad”)

Crearea tabelului și inserarea datelor

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

selectați * din student

Verificați dacă datele au fost inserate în tabelul „student”



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 SQL Server 2016 sau o versiune ulterioară, puteți utiliza această funcție integrată.

În plus „STRING_SPLIT” introduce un șir care are sub-șiruri delimitate și introduce un caracter de utilizat ca delimitator sau separator. Funcția redă un tabel 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 un ș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:

FiecareBază de dateesteconectatculacompatibilitatenivel.Aceastapermitebaza de datecomportamentlaficompatibilcu thestespecialSQLServerversiuneaceastaaleargăpe.

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. „Nume obiect nevalid‘ SPLIT_STRING ’”

Eroare apare dacă nivelul de compatibilitate al bazei de date este mai mic de 130 „Numele obiectului este nevalid split_string”

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 SETA 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 SET 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:

Schimbați nivelul de compatibilitate la 130

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,