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

Откуда:
Сообщений: 7
Всем привет, столкнулся со следующей проблемой - имеется ms sql 2000, в котом отсутствуют регулярные выражения.
Есть столбец, содержащий значения вида:

S000009 2
S000007 2
IA55 2
OA55 2
BM49 2
BM49 2
BM8 2
BM8 2


Каким образом выбрать числа, которые расположены между префиксом (например BM) и пробелом. Если число предваряют нули, они должны быть убраны, т.е на выходе:

S000009 2 -> 9
IA55 2 -> 55
BM49 2 -> 49
BM8 -> 8
24 май 12, 23:02    [12611333]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг без regexp  [new]
nitrexin
Member

Откуда:
Сообщений: 7
Забыл, можно использовать только встроенные функции tsql.
Есть вариант сделать через case & substring, но я надеюсь это не самое оптимальное решение.
24 май 12, 23:07    [12611348]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг без regexp  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
nitrexin,

PATINDEX + CHARINDEX + SUBSTRING + CAST(.. to int)
24 май 12, 23:51    [12611448]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг без regexp  [new]
user89
Member

Откуда:
Сообщений: 2083
nitrexin,

declare @t table (s varchar(500))
insert @t
  select 'S000009 2' union all select 'S000007 2' union all select 'IA55 2' union all select 'OA55 2' union all
  select 'BM49 2' union all select 'BM49 2' union all select 'BM8 2' union all select 'BM8' union all select 'bad string'

select s,
cast(substring(left(s, charindex(' ',s+' ')-1), nullif(patindex('%[0-9]%', left(s, charindex(' ',s+' ')-1)), 0), 200000000) as int) [new_s]
from @t
25 май 12, 08:33    [12611995]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить