Rank: Administration
Medals: Groups: Administrators
Joined: 10/20/2012 Posts: 106 Points: 327 Location: Tbilisi
Thanks: 0 times Was thanked: 0 time(s) in 0 post(s)
|
ხშირად საჭირო რაიმე ტექსტური სტრიქონის ცხრილის სახით წარმოდგენა. მაგალითად, როცა საჭიროა რაიმე ტექსტიდან მასში არსებული სიტყვების დაშლა და მათი ცხრილის (ჩამონათვალის) მიღება. ამ ოპერაციის შესრულება შესაძლებელია სხვადასხვა მეთოდებით, მათ შორის ერთ-ერთი საკმაოდ მარტივი მეთოდია XML-ის გამოყენებით მისი დაშლა:
BB კოდი:DECLARE @xml as xml,@str as nvarchar(4000),@delimiter as nvarchar(50) SET @str=N'კომპანია „აპექსი“ - წარმოადგენს სპეციალისტების ჯგუფს, რომელიც 2004 წლიდან საწამოო - დაწესებულებების ავტომატიზაცის მიზნით ახორციელებს ბიზნეს პროცესების მართვის ავტომატიზირებული სისტემების შექმნასა და დანერგვას' SET @delimiter =' ' SET @xml = cast(('<X>'+replace(@str,@delimiter ,'</X><X>')+'</X>') as xml) SELECT N.value('.', 'nvarchar(50)') as value FROM @xml.nodes('X') as T(N)
პასუხად მივიღებთ ყველა იმ სიტყვების ჩამონათვალს, რომელიც შედიოდა @str ცვლადში და გამოყოფილი იყო char(32)-ით (@delimiter =' ') თუ სიტყვების ჩამონათვალთან ერთად საჭიროა სტრიქონის გადანომვრა, მცირე მოდიფიკაციით შესაძლებელია ID სვეტის დამატებაც :
BB კოდი:SELECT row_number() over (Order by (select 1)) as [rowID],N.value('.', 'nvarchar(50)') as value FROM @xml.nodes('X') as T(N)
ახლა დავუშვათ, რომ იგივე ოპერაციის შესრულება გვჭირდება @t ცხრილის data სვეტისათვის :
BB კოდი: DECLARE @t TABLE( ID INT IDENTITY, data NVARCHAR(500)) INSERT INTO @t(data) VALUES ( N'კომპანია „აპექსი“ - წარმოადგენს სპეციალისტების ჯგუფს'),(N'რომელიც 2004 წლიდან საწამოო-დაწესებულებების ავტომატიზაცის მიზნით'), (N'ახორციელებს ბიზნეს პროცესების მართვის ავტომატიზირებული'),(N'სისტემების შექმნასა და დანერგვას')
ერთი შეხედვით ამის გაკეთება რთულია თუ წინასწარ გამზადებულ სკალარულ ფუნქციას (რომელიც ასრულებს Split ოპერაციას) არ გამოვიყენებთ. თუმცა ამ მეთოდის გამოყენებით, ამის მიღწევა სულაც არ წარმოადგენს რაიმე სირთულეს :
BB კოდი:SELECT m.id, m.data, O.splitdata FROM ( SELECT [ID],data,cast('<X>'+replace(F.data,' ','</X><X>')+'</X>' as XML) as xmlvalue from @t F )m CROSS APPLY ( SELECT fdata.D.value('.','nvarchar(50)') as splitdata FROM m.xmlvalue.nodes('X') as fdata(D)) O
|
|
Apex ltd. http://www.apex.ge
|