Paano Hatiin ang isang String ng isang Delimited Char sa SQL Server?



Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema

Sa artikulong ito, tatalakayin namin ang maraming mga paraan upang hatiin ang na-limit na halaga ng string. Maaari itong makamit gamit ang maraming mga pamamaraan kabilang ang.



  • Paggamit ng STRING_SPLIT function upang hatiin ang string
  • Lumikha ng isang function na tinukoy ng gumagamit na tinukoy ng mesa upang hatiin ang string,
  • Gumamit ng XQuery upang hatiin ang halaga ng string at ibahin ang anyo ng isang delimited string sa XML

Una sa lahat, kailangan naming lumikha ng isang talahanayan at magsingit ng data dito na magagamit sa lahat ng tatlong mga pamamaraan. Dapat maglaman ang talahanayan ng isang solong hilera na may field id at string na may mga character na delimiter dito. Lumikha ng isang talahanayan na pinangalanang 'mag-aaral' gamit ang sumusunod na code.



GUMAWA NG TABLE na mag-aaral (ID INT IDENTITY (1, 1), student_name VARCHAR (MAX))

Ipasok ang mga pangalan ng mag-aaral na pinaghiwalay ng mga kuwit sa isang solong hilera sa pamamagitan ng pagpapatupad ng sumusunod na code.



Ipasok ang mag-aaral (student_name) VALUES ('Monroy, Montanez, Marolahakis, Negley, Albright, Garofolo, Pereira, Johnson, Wagner, Conrad')

Paglikha ng talahanayan at pagpapasok ng data

I-verify kung ang data ay naipasok sa talahanayan o hindi gumagamit ng sumusunod na code.

pumili * mula sa mag-aaral

Patunayan kung ang data ay naipasok sa talahanayan na 'mag-aaral'



Paraan 1: Gumamit ng function na STRING_SPLIT upang hatiin ang string

Sa SQL Server 2016, “STRING_SPLIT” Ang pagpapaandar ay ipinakilala na maaaring magamit sa antas ng pagiging tugma ng 130 pataas. Kung gagamitin mo ang bersyon ng 2016 SQL Server o mas mataas maaari mo itong gamitin na function na build-in.

at saka “STRING_SPLIT” input ng isang string na may delimited sub-strings at input ng isang character na gagamitin bilang delimiter o separator. Ang pagpapaandar ay naglalabas ng isang talahanayan ng solong-haligi na ang mga hilera ay naglalaman ng mga sub-string. Ang pangalan ng haligi ng output ay ' Halaga ” . Ang pagpapaandar na ito ay nakakakuha ng dalawang mga parameter. Ang unang parameter ay isang string at ang pangalawa ay delimiter character o separator batay sa kung saan kailangan naming hatiin ang string. Naglalaman ang output ng isang talahanayan ng solong-haligi kung saan naroroon ang mga substring. Ang haligi ng output na ito ay pinangalanan 'Halaga' tulad ng nakikita natin sa pigura sa ibaba. Bukod dito, ang 'STRING SPLIT' table_valued function ay nagbabalik ng isang walang laman na talahanayan kung ang input string ay Null.

Antas ng pagiging tugma ng database:

Bawat isadatabaseaynakakonektakasama sisapagkakatugmaantasItonagbibigay-daan saangdatabase ngpag-uugalisamagingkatugmakasama ang ikaaypartikularSQLServerbersyonitotumatakbosa

Tatawagin namin ang pagpapaandar na 'string_split' upang hatiin ang string na na-delimitahan ng mga kuwit. Ngunit ang antas ng pagiging tugma ay mas mababa sa 130 kaya't ang sumusunod na error ay naitaas. 'Di-wastong pangalan ng bagay na 'SPLIT_STRING''

May naganap na error kung ang antas ng pagiging tugma ng database ay mas mababa sa 130 'Hindi wastong pangalan ng object split_string'

Sa gayon kailangan naming itakda ang antas ng pagiging tugma ng database sa 130 o mas mataas. Sundin namin ang hakbang na ito upang maitakda ang antas ng pagiging tugma ng database.

  • Una sa lahat itakda ang database sa 'single_user_access_mode' sa pamamagitan ng paggamit ng sumusunod na code.
ALTER DATABASE SET SINGLE_USER
  • Pangalawa, baguhin ang antas ng pagiging tugma ng database sa pamamagitan ng paggamit ng sumusunod na code.
ALTER DATABASE SET SET KOMPATIBILIDAD_LEVEL = 130
  • Ibalik ang database sa mode na pag-access ng multi-user sa pamamagitan ng paggamit ng sumusunod na code.
ALTER DATABASE SET MULTI_USER
GAMITIN [master] GO ALTER DATABASE [bridge_centrality] SET SINGLE_USER ALTER DATABASE [bridge_centrality] SET KOMATIBILIDAD_LEVEL = 130 ALTER DATABASE [bridge_centrality] SET MULTI_USER GO

Ang output ay:

Baguhin ang antas ng pagiging tugma sa 130

Patakbuhin ngayon ang code na ito upang makuha ang kinakailangang resulta.

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