Ako rozdeliť reťazec ohradený znakom na serveri SQL Server?



Vyskúšajte Náš Nástroj Na Odstránenie Problémov

V tomto článku sa budeme zaoberať niekoľkými spôsobmi rozdelenia hodnoty vymedzeného reťazca. To je možné dosiahnuť pomocou viacerých metód vrátane.



  • Použitie funkcie STRING_SPLIT na rozdelenie reťazca
  • Vytvorte používateľom definovanú funkciu s hodnotou tabuľky na rozdelenie reťazca,
  • Pomocou nástroja XQuery rozdeľte hodnotu reťazca a transformujte reťazec s oddeľovačmi do formátu XML

Najskôr musíme vytvoriť tabuľku a vložiť do nej údaje, ktoré sa použijú vo všetkých troch metódach. Tabuľka by mala obsahovať jeden riadok s ID poľa a reťazec so znakmi oddeľovača. Pomocou nasledujúceho kódu vytvorte tabuľku s názvom „študent“.



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

Vložte mená študentov oddelené čiarkami do jedného riadku vykonaním nasledujúceho kódu.



INSERT INTO student (student_name) VALUES ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')

Vytváranie tabuliek a vkladanie údajov

Pomocou nasledujúceho kódu overte, či boli do tabuľky vložené údaje alebo nie.

vyberte * od študenta

Skontrolujte, či boli údaje vložené do tabuľky „študent“



Metóda 1: Na rozdelenie reťazca použite funkciu STRING_SPLIT

V serveri SQL Server 2016 „STRING_SPLIT“ bola zavedená funkcia, ktorú je možné použiť s úrovňou kompatibility 130 a vyššou. Ak používate verziu SQL Server 2016 alebo vyššiu, môžete použiť túto integrovanú funkciu.

Ďalej „STRING_SPLIT“ zadá reťazec, ktorý má obmedzené podreťazce a jeden znak, ktorý sa použije ako oddeľovač alebo oddeľovač. Funkcia vygeneruje tabuľku s jedným stĺpcom, ktorej riadky obsahujú podreťazce. Názov výstupného stĺpca je „ Hodnota “ . Táto funkcia má dva parametre. Prvý parameter je reťazec a druhý parameter oddeľovača alebo oddeľovač, na základe ktorého musíme reťazec rozdeliť. Výstup obsahuje tabuľku s jedným stĺpcom, v ktorej sú podreťazce. Tento výstupný stĺpec je pomenovaný „Hodnota“ ako vidíme na obrázku nižšie. Okrem toho „STRING SPLIT“ funkcia table_valued vráti prázdnu tabuľku, ak je vstupný reťazec NULL.

Úroveň kompatibility databázy:

Každýdatabázyjepripojenýsdokompatibilitaúrovni.Toumožňujethedatabázysprávaniedobyťkompatibilnýs thjenajmäSQLSerververziatobežína.

Teraz zavoláme funkciu „string_split“ na rozdelenie reťazca oddeleného čiarkami. Úroveň kompatibility však bola nižšia ako 130, preto sa zvýšila nasledujúca chyba. „Neplatný názov objektu„ SPLIT_STRING ““

Chyba nastáva, ak je úroveň kompatibility databázy nižšia ako 130 „Neplatný názov objektu split_string“

Preto musíme nastaviť úroveň kompatibility databázy na 130 alebo vyššiu. Podľa tohto kroku teda nastavíme úroveň kompatibility databázy.

  • Najskôr nastavte databázu na „single_user_access_mode“ pomocou nasledujúceho kódu.
ALTER DATABASE SET SINGLE_USER
  • Po druhé, zmeňte úroveň kompatibility databázy pomocou nasledujúceho kódu.
ALTER DATABASE SET COMPATIBILITY_LEVEL = 130
  • Vráťte databázu späť do režimu prístupu viacerých používateľov pomocou nasledujúceho kódu.
ALTER DATABASE 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

Výstup bude:

Zmeňte úroveň kompatibility na 130

Teraz spustite tento kód, aby ste dosiahli požadovaný výsledok.

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