Logo sk.nowadaytechnol.com

Ako Rozdeliť Reťazec Ohradený Znakom Na Serveri SQL Server?

Obsah:

Ako Rozdeliť Reťazec Ohradený Znakom Na Serveri SQL Server?
Ako Rozdeliť Reťazec Ohradený Znakom Na Serveri SQL Server?

Video: Ako Rozdeliť Reťazec Ohradený Znakom Na Serveri SQL Server?

Video: Ako Rozdeliť Reťazec Ohradený Znakom Na Serveri SQL Server?
Video: 1С клиент-сервер: автоматическое создание резервных копий. 2024, Marec
Anonim

V tomto článku si ukážeme niekoľko spôsobov, ako rozdeliť hodnotu 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 údaj, ktorý bude použitý 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')

Image
Image

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

vyberte * od študenta

Image
Image

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 vloží 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áza je prepojená s úrovňou kompatibility. Umožňuje kompatibilitu správania databázy s konkrétnou verziou servera SQL Server, na ktorej beží.

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 ““

Image
Image

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:

Image
Image

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

Výstup pre tento dopyt bude:

Image
Image

Metóda 2: Ak chcete reťazec rozdeliť, vytvorte používateľom definovanú funkciu s hodnotou tabuľky

Túto tradičnú metódu určite podporujú všetky verzie servera SQL Server. V tejto technike vytvoríme používateľom definovanú funkciu na rozdelenie reťazca oddeľovačom pomocou „ PODKLAD”Funkcia,“ CHARINDEX ”A zatiaľ čo slučka. Túto funkciu je možné použiť na pridanie údajov do výstupnej tabuľky, pretože jej návratový typ je „tabuľka“.

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 = koncová_pozícia = 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 (SUBSTRING @ string_value, @start_position, @ending_position - @start_position)) SET @start_position = @ending_position + 1 SET @ending_position = CHARINDEX (@delimiter_character, @string_value, @start_position) KONIEC NÁVRAT KONIEC

Teraz spustite nasledujúci skript, aby ste zavolali funkciu split na rozdelenie reťazca podľa oddeľovača.

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)

Výsledná sada bude taká.

Image
Image

Metóda 3: Pomocou nástroja XQuery rozdeľte hodnotu reťazca a transformujte reťazec s oddeľovačmi do formátu XML

Pretože funkcie definované používateľom sú vyčerpávajúce, musíme sa im vyhnúť. Ďalšou možnosťou je zabudovaná funkcia „string_split“, ale túto funkciu je možné použiť pre databázu, pre ktorú je úroveň kompatibility 130 alebo vyššia. Prichádza teda ďalšie riešenie riešenia tejto náročnej úlohy. reťazec je možné rozdeliť pomocou nasledujúceho 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 (('' + Nahradiť (@string_value, @delimiter_value, '') + '') AS XML) SELECT @xml_value

Výstup pre tento dopyt bude:

Image
Image

Ak chcete zobraziť celý súbor XML. Kliknite na odkaz. Po kliknutí bude odkaz vyzerať takto.

Image
Image

Teraz by sa mal reťazec XML ďalej spracovať. Nakoniec použijeme „x-Query“na dopytovanie z 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 (('' + Nahradiť (@string_value, @delimiter_value, '') + '') AS XML) VYBERTE xmquery ('.'). value ('.', 'VARCHAR (15)') AKO HODNOTU Z @ xml_value.nodes ('/ studentname')) AS x (m)

Výstup bude taký:

Odporúča: