Logo hu.nowadaytechnol.com

Hogyan Lehet Szétválasztani Egy Karakterláncot Egy Elválasztott Karakterrel Az SQL Serverben?

Tartalomjegyzék:

Hogyan Lehet Szétválasztani Egy Karakterláncot Egy Elválasztott Karakterrel Az SQL Serverben?
Hogyan Lehet Szétválasztani Egy Karakterláncot Egy Elválasztott Karakterrel Az SQL Serverben?

Videó: Hogyan Lehet Szétválasztani Egy Karakterláncot Egy Elválasztott Karakterrel Az SQL Serverben?

Videó: Hogyan Lehet Szétválasztani Egy Karakterláncot Egy Elválasztott Karakterrel Az SQL Serverben?
Videó: Перенос базы данных SQL Server в управляемый экземпляр SQL Azure 2024, Március
Anonim

Ebben a cikkben több módszert is megvitatunk az elválasztott karakterlánc felosztásával. 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 az elválasztott karakterláncot alakítsa át XML-be

Először is létre kell hoznunk egy táblázatot, és be kell illesztenünk a datát, amelyet mindhárom módszerben használni fogunk. A táblázatnak egyetlen sort kell tartalmaznia, mezőazonosítóval és karakterlánccal, benne határoló karakterekkel. Hozzon létre „diák” nevű táblázatot a következő 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 egy 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')

Image
Image

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

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

Image
Image

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

Az SQL Server 2016 alkalmazásban „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” bemeneti karaktersorozatot, amely elhatárolta az alhúrokat, és egy karaktert ad meg, 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 a string, a második pedig egy elválasztó karakter vagy elválasztó, amely alapján fel kell osztanunk a stringet. 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 adatbázis össze van kapcsolva a kompatibilitási szinttel. Lehetővé teszi, hogy az adatbázis viselkedése kompatibilis legyen az adott SQL Server verzióval, amelyen fut.

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„ SPLIT_STRING”objektumnév”

Image
Image

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:

Image
Image

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, ',')

A lekérdezés kimenete a következő lesz:

Image
Image

2. módszer: A karakterlánc felosztásához hozzon létre egy felhasználó által definiált táblázatértékű függvényt

Természetesen ezt a hagyományos módszert az SQL Server minden verziója támogatja. Ebben a technikában létrehozunk egy felhasználó által definiált függvényt, amely a karakterláncot elválasztott karakterekkel osztja fel a SUBSTRING”Funkció, CHARINDEX ”És közben hurok. Ez a függvény használható a dat hozzáadására a kimeneti táblához, mivel a visszatérési típusa „table”.

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 = @start_pozíció INT end_position = CHARINDEX (@delimiter_character, @string_value) Mialatt @start_position <LEN (@string_value) + 1 KEZDÉS, HA @ending_position = 0 SET @ending_position = LEN (@string_value) + 1 INSERT INTO @result_set (splited_data) 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

Most hajtsa végre az alábbi parancsfájlt, hogy meghívja a split funkciót a karakterlánc elválasztó karakterrel történő felosztásához.

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)

Az eredménykészlet ilyen lesz.

Image
Image

3. módszer: Az XQuery segítségével ossza fel a karakterlánc értékét, és alakítsa át a körülhatárolt karakterláncot XML-be

Mivel a felhasználó által definiált függvények kimerítő erőforrások, ezért ezeket a funkciókat kerülnünk kell. Egy másik lehetőség a beépített „string_split” függvény, de ez a funkció használható olyan adatbázisokhoz, amelyek kompatibilitási szintje 130 vagy magasabb. Tehát itt jön egy másik megoldás ennek a nehéz feladatnak a megoldására. a karakterlánc a következő segítségével bontható fel XML.

DECLARE @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 (('' + Replace (@string_value, @delimiter_value, '') + '') AS XML) SELECT @xml_value

A lekérdezés kimenete a következő lesz:

Image
Image

Ha meg akarja tekinteni a teljes XML fájlt. Kattints a linkre. Ha rákattint a linkkódra, ez így fog kinézni.

Image
Image

Most az XML karakterláncot tovább kell dolgozni. Végül az „x-Query” kifejezéssel fogunk lekérdezni az XML-ből.

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

A kimenet a következő lesz:

Ajánlott: