Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 разбор строки????  [new]
JohnnySE
Member

Откуда:
Сообщений: 55
есть строка вида {{aaa{bbb{ccc},{ddd}}}}
Количество {} - не ограничено
Как разобрать ее и получить
aaa
bbb
ccc
ddd

Заранее спасибо
29 мар 06, 17:09    [2503376]     Ответить | Цитировать Сообщить модератору
 Re: разбор строки????  [new]
VirusXP
Member

Откуда: Москва
Сообщений: 2266
искать символ { pathindex и резать строку subsring
29 мар 06, 17:11    [2503392]     Ответить | Цитировать Сообщить модератору
 Re: разбор строки????  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5113
1) привести строку к одному типу разделителя (например '{'): см. в BOL replace
2) заполнить временную таблицу кусками между разделителем: см. в BOL substring и partindex
29 мар 06, 17:17    [2503437]     Ответить | Цитировать Сообщить модератору
 Re: разбор строки????  [new]
VirusXP
Member

Откуда: Москва
Сообщений: 2266
правильный синтаксис - patindex :)
29 мар 06, 17:19    [2503448]     Ответить | Цитировать Сообщить модератору
 Re: разбор строки????  [new]
студент2006
Member

Откуда:
Сообщений: 53
вообще здесь, как мне кажется рекурсией попахивает
29 мар 06, 17:22    [2503475]     Ответить | Цитировать Сообщить модератору
 Re: разбор строки????  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

нате
declare @var varchar(100)
set @var = '{{aaa{bbb{ccc},{ddd}}}}'

declare @temp table (val varchar(100))

while patindex('%{[^{}]%', @var) <> 0
begin
  set @var = substring(@var, patindex('%{[^{}]%', @var) + 1, len(@var))
  insert into @temp values (substring(@var, 1, patindex('%[{}]%', @var) - 1))
end

select * from @temp



Posted via ActualForum NNTP Server 1.3

29 мар 06, 17:36    [2503548]     Ответить | Цитировать Сообщить модератору
 Re: разбор строки????  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Рекурсия это для студентов :)

Допустим есть таблица с последовательностью чисел от 1 до некого большого или такая функция:

-- последовательность чисел от одного до другого
CREATE  FUNCTION sequence(
@start int, -- с
@end int)   -- по
RETURNS @seq TABLE (i int )
AS
BEGIN
declare @n int
set @n=@start
while 2*2=4
begin
  insert @seq select @n
  set @n=@n+1
  if @n>@end break
end
RETURN
END

Тогда можно одним запросом
declare @s varchar(99) set @s='{{aaa{bbb{ccc},{ddd}}}}'
select s.i, substring(@s,s.i+1,patindex('%[{}]%', substring(@s, s.i+1,8000))-1)
  from sequence(1,100) s
  where substring(@s,s.i,1) ='{' and substring(@s,s.i+1,1) not in ('{','}')
29 мар 06, 17:49    [2503662]     Ответить | Цитировать Сообщить модератору
 Re: разбор строки????  [new]
JohnnySE
Member

Откуда:
Сообщений: 55
Спасибо всем, пойду пробовать
29 мар 06, 17:58    [2503710]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить