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

Откуда:
Сообщений: 4
До сих пор работал с MySQL. Потребовалось сделать запрос для MS SQL.
Задача такая: выбрать данные (номер), которые сопадают с введенными, либо имеют спереди неограниченное количество нулей.

Пример: поиск 32.
Должно отобразиться: 32, 032, 0032, 00032 и т.д. если они, естесственно, есть.

В MySQL решается достаточно легко через regexp. Как можно это решить для MS SQL?
Помогите, пожалуйста.
20 окт 09, 13:59    [7811531]     Ответить | Цитировать Сообщить модератору
 Re: регулярное выражение  [new]
iljy
Member

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

select * from Table
where replace(ltrim(replace(str, '0', ' ')), ' ', '0') = '32'
20 окт 09, 14:02    [7811568]     Ответить | Цитировать Сообщить модератору
 Re: регулярное выражение  [new]
ЛиП
Member

Откуда:
Сообщений: 348
тип данных?
Like () ?
20 окт 09, 14:02    [7811571]     Ответить | Цитировать Сообщить модератору
 Re: регулярное выражение  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
DECLARE @S VARCHAR(100)='32';

SELECT *
,(
  SELECT TOP 1 REPLICATE('0',number)+@S
  FROM master.dbo.spt_values V
  WHERE type='P' AND V.number<=LEN(T.Field) AND T.Field LIKE '%'+REPLICATE('0',number)+@S+'%'
  ORDER BY 1
 )
FROM [Table] T;
??
20 окт 09, 14:25    [7811741]     Ответить | Цитировать Сообщить модератору
 Re: регулярное выражение  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31166
radar555
В MySQL решается достаточно легко через regexp. Как можно это решить для MS SQL?
where convert(varchar, field) = 32
20 окт 09, 14:33    [7811824]     Ответить | Цитировать Сообщить модератору
 Re: регулярное выражение  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31166
radar555
В MySQL решается достаточно легко через regexp. Как можно это решить для MS SQL?
Тоесть
where convert(int, field) = 32
20 окт 09, 14:34    [7811831]     Ответить | Цитировать Сообщить модератору
 Re: регулярное выражение  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
-- test data
declare @t table(s varchar(10) not null)
insert into @t(s)
select '00032' union all
select '032'   union all
select ' 032'  union all
select '032 '  union all
select '0 32'  union all
select '01032' union all
select '32'    union all
select '3'     union all
select ''

declare @v varchar(10)
set @v = '32'
-- end of test data

select s
  from @t
 where cast(replicate('0', charindex(@v, s) - 1) + @v as varbinary(max)) = cast(s as varbinary(max))

s
----------
00032
032
32

(3 row(s) affected)
20 окт 09, 14:35    [7811846]     Ответить | Цитировать Сообщить модератору
 Re: регулярное выражение  [new]
radar555
Member

Откуда:
Сообщений: 4
Большое спасибо всем! Получилось.
20 окт 09, 14:47    [7811966]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить