четвъртък, 24 април 2014 г.

Разделяне на числови стойности от текст в SQL

Силата на SQL е в съхранението и обработването на голям обем от структурирана информация. Когато опре до динамични операции като разделянето на един текст на няколко части (неизвестно колко преварително) за предпочитане са програмни езици като C#. Все пак, ако не гледаме толкова по-добрата продуктивност, а за какво после ще ни трябват тези разделени данни има случаи в които по-удобно е това да става директно през базата. И SQL ни предлага тази възможност чрез преобразуването и използването на информацията в XML формат.



Програмен код:


 declare @text nvarchar(max)
 declare @splitter varchar(1)
 declare @xml xml

 set @text = '20,26,8473,98,92,752,87123,73420,8732'
 set @splitter = ','

 set @xml = cast(('<n>' +
  replace(@text, @splitter, '</n><n>') + 
  '</n>') as xml)
  
 select Y.ID.value('.','int') as ID
 from @xml.nodes('/n') as Y(ID)

Обяснение:


Ето и какво представлява самият трик за разделянето на числата от текст. Имаме последователност от числа с разделител между тях в случая е ','. Записваме какъв е разделителя в променливата @splitter. Ключовата част е в разменянето на разделителя с затварящ и отварящ xml таг. Освен това добавяме в двата края на текста съответно отварящ в началото и затварящ в края таг. Така полученият нов текст се преобразува до валиден xml, който съдържа само 1 тип елементи (n) (пример: <n>1</n><n>2</n><n>3</n>). Самото извличането на данни от записания xml се осъществява чрез използване на xml методите nodes() и value().

Получените числа например може да се използват за записване във временна таблица и join със съществуваща в базата таблица за да отделим само стойностите, които ни трябват. Или за някоя друга операция в базата изборът е ваш.

Няма коментари:

Публикуване на коментар