YetAnotherForum
სალამი სტუმარს ძებნა | აქტიური თემები | შესვლა | რეგისტრაცია

Poll Question : გამოთქვით თქვენი აზრი
Choice Votes Statistics
კარგია 1 50 %
საშუალო 1 50 %
ცუდი 0 0 %
Total 2 100%

ფავორიტებში დამატება
Split String in XML
vajaGM Offline
#1 Posted : Friday, September 17, 2010 3:28:03 AM

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
ქუოტა (Quote):
Sponsor  
 
Apex ltd. http://www.apex.ge
Users browsing this topic
Guest
ფავორიტებში დამატება
Forum Jump  
თქვენ არ შეგიძლიათ დაწეროთ ახალი თემა ამ ფორუმში.
თქვენ არ შეგიძლიათ გასცეთ პასუხი, თემას, ამ ფორუმში .
თქვენ არ შეგიძლიათ წაშალოთ თქვენი პოსტი ამ ფორუმში.
თქვენ არ შეგიძლიათ ჩაასწოროთ თქვენი პოსტი ამ ფორუმში.
თქვენ არ შეგიძლიათ შექმნათ გამოკითხვა ამ ფორუმში.
თქვენ არ შეგიძლიათ ხმის მიცემა ამ ფოუმში.

YAFVision Theme by Jaben Cargman (Tiny Gecko)
Powered by YAF | YAF © 2003-2009, Yet Another Forum.NET
This page was generated in 0.062 seconds.