Распарсинг строки с разделителем

by Alexey Knyazev 8. августа 2010 02:03

Как-то я уже писал, как можно разбить строки таблицы на состовляющие ("Разбиваем строки нa слoва"). Но из 4 примеров только 1ый подходил для SQL Server 2000 и ниже. А у меня появилась задача распарсить строки с разделителем в виде запятой и полученные значения занести в отдельную таблицу, как раз в 2000ой версии.

Основная сложность этой задачи в том, что объем таблицы несколько миллионов строк и лочить таблицу на долго нельзя. После нескольких эксперементов получился скрипт, который отработал на достаточно большом объеме за несколько десятков секунд. Вариант не претендует на звание самого изящного, но все-таки размещу его тут.

В качестве исходной таблицы будет таже, что и в предыдущем посте про парсинг строк:

declare @t table (name varchar(255))
insert into @t
select 'Киев'
union all
select 'Киев Моссква'
union all
select 'Киев Моссква Киев'
union all
select 'Киев Моссква Киев Киев Моссква Киев'
union all
select 'Киев Моссква'
union all
select 'Киев Моссква Киев'


select substring( name, i2 + 1, i1 - i2 -1 ) name 
from
(
select t1.name
     , charindex( ' ', t1.name + ' ', number ) i1
     , case when number = 0 then 0 else charindex( ' ', t1.name + ' ', number - 1 ) end i2
  from @t t1 
    inner join master.dbo.spt_values t2
      on t2.type = 'P' and number between 0 and len( t1.name )
) t where i1 != i2

Tags: , ,

SQL Server

Добавить комментарий

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading