Hogyan lehet szétválasztani egy karakterláncot egy elválasztott karakterrel az SQL Serverben?



Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére

Ebben a cikkben több módszert is megvitatunk az elválasztott karakterlánc felosztására. Többféle módszerrel érhető el, beleértve.



  • A STRING_SPLIT függvény használata a karakterlánc felosztásához
  • Hozzon létre egy felhasználó által definiált táblázatértékű függvényt a karakterlánc felosztásához,
  • Az XQuery segítségével ossza fel a karakterlánc értékét, és egy elválasztott karakterláncot alakítson át XML-be

Először is létre kell hoznunk egy táblázatot, és be kell illesztenünk abba az adatokat, amelyeket mindhárom módszerben használni fognak. A táblázatnak egyetlen sort kell tartalmaznia, mezőazonosítóval és karakterlánccal, benne határoló karakterekkel. Hozzon létre egy „diák” nevű táblázatot az alábbi kód használatával.



TÁBLÁZAT LÉTREHOZÁSA (Azonosító azonosítója (1, 1), tanuló_neve VARCHAR (MAX))

Helyezze vesszővel elválasztott diákneveket egyetlen sorba a következő kód végrehajtásával.



INSERT INTO hallgató (hallgató_neve) ÉRTÉKEI ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')

Táblázat létrehozása és adatbeillesztés

Ellenőrizze, hogy az adatokat beillesztették-e a táblázatba, vagy nem használja a következő kódot.

válassza a * -t a hallgatótól

Ellenőrizze, hogy be vannak-e kapcsolva adatok a „hallgató” táblába



1. módszer: Használja a STRING_SPLIT függvényt a karakterlánc felosztásához

Az SQL Server 2016-ban „STRING_SPLIT” funkciót vezettek be, amely a 130-as és magasabb szintű kompatibilitási szintekkel használható. Ha a 2016-os SQL Server vagy újabb verziót használja, használhatja ezt a beépített funkciót.

Továbbá „STRING_SPLIT” beír egy karaktersorozatot, amely elhatárolta az alhúrokat, és beír egy karaktert, amelyet elválasztóként vagy elválasztóként használhat. A függvény egy oszlopos táblázatot ad ki, amelynek sorai tartalmazzák az alhúrokat. A kimeneti oszlop neve: Érték' . Ez a függvény két paramétert kap. Az első paraméter egy karakterlánc, a második pedig egy elválasztó karakter vagy elválasztó, amely alapján fel kell osztanunk a karakterláncot. A kimenet egy oszlopos táblázatot tartalmaz, amelyben alszövegek találhatók. Ennek a kimeneti oszlopnak a neve 'Érték' amint az alábbi ábrán láthatjuk. Sőt, a „STRING SPLIT” A table_valued függvény üres táblát ad vissza, ha a bemeneti karakterlánc NULL.

Az adatbázis kompatibilitási szintje:

Minden egyesadatbázisvancsatlakoztatvaval velnak nekkompatibilitásszint.Aztlehetővé tesziaadatbázis ’viselkedésnak neklenniösszeegyeztethetőth-velvankülönösSQLszerverváltozataztfuttovább.

Most a „string_split” függvényt hívjuk meg a vesszőkkel elválasztott karakterlánc felosztásához. De a kompatibilitási szint kevesebb volt, mint 130, ezért a hibát felvetették. „Érvénytelen objektumnév:„ SPLIT_STRING ””

Hiba lép fel, ha az adatbázis kompatibilitási szintje alacsonyabb, mint 130 „Érvénytelen objektumnév split_string”

Ezért az adatbázis-kompatibilitási szintet 130-ra vagy magasabbra kell állítanunk. Tehát ezeket a lépéseket követve állítjuk be az adatbázis kompatibilitási szintjét.

  • Először állítsa az adatbázist “single_user_access_mode” értékre a következő kód használatával.
ALTER DATABASE SET SINGLE_USER
  • Másodszor módosítsa az adatbázis kompatibilitási szintjét a következő kód használatával.
ALTER DATABASE SET COMPATIBILITY_LEVEL = 130
  • Helyezze vissza az adatbázist többfelhasználós hozzáférési módba a következő kód használatával.
ALTER DATABASE SET MULTI_USER
HASZNÁLJA [master] GO ALTER ADATBÁZIS [bridge_centrality] SET SINGLE_USER ALTER DATABASE [bridge_centrality] SET COMPATIBILITY_LEVEL = 130 ALTER DATABASE [bridge_centrality] SET MULTI_USER GO

A kimenet a következő lesz:

Módosítsa a kompatibilitási szintet 130-ra

Most futtassa ezt a kódot a kívánt eredmény eléréséhez.

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