Kaip padalinti eilutę pagal SQL serverio atribotą simbolį?

Šiame straipsnyje aptarsime kelis būdus, kaip padalyti atribotą eilutės reikšmę. Tai galima pasiekti naudojant kelis metodus, įskaitant.

  • Norėdami padalyti eilutę, naudokite funkciją STRING_SPLIT
  • Sukurkite vartotojo apibrėžtą lentelės vertę funkciją, kad padalytumėte eilutę,
  • Naudokite „XQuery“, norėdami padalyti eilutės vertę ir transformuoti atribotas eilutes į XML

Pirmiausia turime sukurti lentelę ir į ją įterpti duomenis, kurie bus naudojami visais trim metodais. Lentelėje turėtų būti viena eilutė su lauko ID ir eilute, kurioje būtų skiriamieji ženklai. Sukurkite lentelę pavadinimu „studentas“ naudodami šį kodą.

SUKURTI STALĄ studentas (ID TAPATYBĖ (1, 1), studento vardas VARCHAR (MAX))

Į vieną eilutę įterpkite studentų vardus, atskirtus kableliais, vykdydami šį kodą.

ĮRAŠYTI studento (studento_vardas) VERTYBES ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')

Patikrinkite, ar duomenys buvo įtraukti į lentelę, ar nenaudojate šio kodo.

pasirinkite * iš studento

1 metodas: Norėdami padalyti eilutę, naudokite funkciją STRING_SPLIT

„SQL Server 2016“, „STRING_SPLIT“ buvo pristatyta funkcija, kurią galima naudoti su suderinamumo lygiu 130 ir aukštesniais. Jei naudojate 2016 m. Ar naujesnę „SQL Server“ versiją, galite naudoti šią integruotą funkciją.

Be to „STRING_SPLIT“ įveda eilutę, kurioje yra atskirtos sub eilutės, ir įveda vieną simbolį, kurį reikia naudoti kaip skiriamąjį arba atskyriklį. Funkcija išleidžia vieno stulpelio lentelę, kurios eilutėse yra po eilutės. Išvesties stulpelio pavadinimas yra „Vertė “. Ši funkcija gauna du parametrus. Pirmasis parametras yra eilutė, o antrasis yra skiriamasis simbolis arba atskyriklis, pagal kurį mes turime padalyti eilutę. Išvestyje yra vieno stulpelio lentelė, kurioje yra pakraščiai. Šis išvesties stulpelis pavadintas „Vertė“ kaip matome paveikslėlyje žemiau. Be to, „STRING SPLIT“ Funkcija table_valued grąžina tuščią lentelę, jei įvesties eilutė yra NULL.

Duomenų bazės suderinamumo lygis:

Kiekviena duomenų bazė yra susieta su suderinamumo lygiu. Tai leidžia duomenų bazės veikimą suderinti su konkrečia SQL serverio versija, kuria ji veikia.

Dabar, norėdami padalyti eilutes, kurias skiria kableliai, iškviesime funkciją „string_split“. Tačiau suderinamumo lygis buvo mažesnis nei 130, todėl buvo padaryta klaida. „Netinkamas objekto pavadinimas„ SPLIT_STRING ““

Taigi turime nustatyti duomenų bazės suderinamumo lygį iki 130 arba daugiau. Taigi atlikdami šiuos veiksmus nustatysime duomenų bazės suderinamumo lygį.

  • Pirmiausia nustatykite duomenų bazę „single_user_access_mode“ naudodami šį kodą.
KEISTI DUOMENŲ BAZĖS NUSTATYTI SINGLE_USER
  • Antra, pakeiskite duomenų bazės suderinamumo lygį naudodami šį kodą.
KEITIMO DUOMENŲ BAZĖS RINKINYS SUDERINAMUMĄ_LYGIS = 130
  • Perkelkite duomenų bazę į kelių vartotojų prieigos režimą naudodami šį kodą.
PAKEISTI DUOMENŲ BAZĖS NUSTATYTI MULTI_USER
NAUDOTI [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

Rezultatas bus:

Dabar paleiskite šį kodą, kad gautumėte reikiamą rezultatą.

PAREIŠKKITE @string_value VARCHAR (MAX); SET @ string_value = 'Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad' PASIRINKTI * IŠ STRING_SPLIT (@ string_value, ',')

Šios užklausos rezultatas bus:

2 metodas: Norėdami padalyti eilutę, sukurkite vartotojo apibrėžtą lentelės vertę funkciją

Be abejo, šį tradicinį metodą palaiko visos „SQL Server“ versijos. Šioje technikoje sukursime vartotojo apibrėžtą funkciją, kad eilutė būtų padalyta atskirtu simboliu naudojant „PASTABA" funkcija, "CHARINDEX“Ir kol kilpa. Ši funkcija gali būti naudojama duomenims pridėti prie išvesties lentelės, nes jos grąžinimo tipas yra „lentelė“.

CREATE FUNCTION [dbo]. [Split_string] (@string_value NVARCHAR (MAX), @delimiter_character CHAR (1)) RETURNS @result_set TABLE (split_data NVARCHAR (MAX)) BEGIN DECLARE @start_position INT, @ending_position INT SELECT @ending_position = CHARINDEX (@delimiter_character, @string_value), O @start_position <LEN (@string_value) + 1 PRADŽIA, JEI @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

Dabar vykdykite žemiau esantį scenarijų, kad iškviestumėte padalijimo funkciją, kad eilutė būtų padalyta pagal simbolį.

PAREIŠKKITE @student_name VARCHAR (MAX); PAREIŠKKITE @delimiter CHAR (1); SET @ delimiter = ',' SET @student_name = (PASIRINKITE studento_vardą iš studento) SELECT * FROM dbo.split_string (@student_name, @delimiter)

Rezultatų rinkinys bus toks.

3 metodas: Naudokite „XQuery“, norėdami padalyti eilutės vertę ir transformuoti atribotas eilutes į XML

Kadangi vartotojo nustatytos funkcijos yra išsamios, turime vengti šių funkcijų. Kita parinktis yra įmontuota „string_split“ funkcija, tačiau šią funkciją galima naudoti duomenų bazei, kurios suderinamumo lygis yra 130 ar didesnis. Taigi čia yra kitas sprendimas, kaip išspręsti šią sunkią užduotį. Stygas galima padalinti naudojant šiuos veiksmus XML.

DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (PASIRINKITE studento vardą iš studento) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Pakeisti ( @string_value, @delimiter_value, '') + '') AS XML) SELECT @xml_value

Šios užklausos išvestis bus:

Jei norite peržiūrėti visą XML failą. Spustelėkite nuorodą. Kai spustelėsite nuorodos kodą, jis atrodys taip.

Dabar XML eilutė turėtų būti toliau apdorojama. Galiausiai naudosime „x-Query“ užklausoms iš XML.

DECLARE @xml_value AS XML, @string_value AS VARCHAR (2000), @delimiter_value AS VARCHAR (15) SET @ string_value = (PASIRINKITE studento vardą iš studento) SET @delimiter_value = ',' SET @xml_value = Cast (('' + Pakeisti ( @string_value, @delimiter_value, '') + '') AS XML) SELECT xmquery ('.'). value ('.', 'VARCHAR (15)') AS VALUE FROM @ xml_value.nodes ('/ studentname') ) AS x (m) 

Išvestis bus tokia:


$config[zx-auto] not found$config[zx-overlay] not found