Анализ строки в SQL Server
Возникла следующая задача. Есть таблица в СУБД Microsoft SQL Server, содержащая ~3000 записей. Одно из полей этой таблицы имеет тип varchar(255) и содержит набор текстовых выражений, заключённых в двойные кавычки и разделённых запятыми. Требуется подсчитать количество этих текстовых выражений для каждой записи таблицы.
Я решал задачу с помощью скрипта на T-SQL и с использованием курсоров.
Сначала объявил временную таблицу #t, содержащую уникальный идентификатор исследуемой таблицы и анализируемое поле
create table #t (Код char(24), ObrCou int, RepCou int)
insert into #t
select Код, 0, 0
from ...
Затем объявил курсор по исходной таблице
declare cur cursor for
select ...
Далее открываю курсор, делаю цикл и на каждом шаге подсчитываю количество текстовых выражений
open cur
declare @c1 char(24), @c2 varchar(255), @c3 varchar(255)
fetch next from cur into @c1, @c2, @c3
while @@FETCH_STATUS = 0
begin
declare @s varchar(255), @i int, @j int, @cou1 int, @cou2 int
set @s = @c2
set @cou1 = 0
while (charindex('"', @s) > 0) begin
set @i = charindex('"', @s)
if (@i > 0) begin
set @j = charindex('"', @s, @i + 1)
if (@j > 0) begin
if (@j > @i + 1) begin
set @cou1 = @cou1 + 1
end
set @s = right(@s, len(@s) - @j)
end
end
end
update #t set ObrCou = @cou1, RepCou = @cou2 where Код = @c1
fetch next from cur into @c1, @c2, @c3
end
close cur
deallocate cur
select Top 10 * from #t where RepCou <> 0
drop table #t
Количество текстовых выражений записывается в поле RepCou таблицы #t.
Рассмотренный вариант решения работает очень медленно и потому применим только для небольшого количества записей. Я так и не дождался обработки всей таблицы из 3000 записей.
Я пытался копировать анализируемый столбец в Excel. Но Excel у первого текстового выражения убирает двойные кавычки, а остальные оставляет.
Думаю, что для решения поставленной задачи нужно выгрузить исходную таблицу в CSV и дальше анализировать в AWK, R или в Python.


osya





