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

Откуда:
Сообщений: 373
create table T1 (Number varchar(30)) 
insert into T1 values('10аб')
insert into T1 values('11а')
insert into T1 values('149/36')
insert into T1 values('1000фав')

-- Нужно отсортировать по первым числам : 10,11,149,1000

select *,cast(substring([Number], 1, LEN([Number]) - PATINDEX('%[^0-9]',[4]) + 1) as int) as Num 
from T1 
order by Num 



Syntax error converting the varchar value '149/36' to a column of data type int.
20 янв 14, 09:46    [15438823]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
select *, cast(substring([Number], 1, LEN([Number]) - PATINDEX('%[^0-9]%', Number) + 1) as int) as Num 
from T1 
order by Num;
20 янв 14, 09:49    [15438837]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
sanekoffice
Member

Откуда:
Сообщений: 373
Ennor Tiegael,

-- Я просто урезал табличку )

insert into T1 values('3')
insert into T1 values('38а')
insert into T1 values('4')

-- На выходе 3, 38а, 4 
-- ДОЛЖНО БЫТЬ : 3,4,38а
20 янв 14, 10:01    [15438899]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
select *,
	cast(substring([Number], 1, case when PATINDEX('%[^0-9]%', Number) = 0 then LEN([Number]) else PATINDEX('%[^0-9]%', Number) - 1 end) as int) as Num
from @T1
order by Num;
20 янв 14, 10:11    [15438945]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
sanekoffice
Member

Откуда:
Сообщений: 373
Ennor Tiegael,
Спасибо тебе, добрый человек) Помогло
20 янв 14, 10:21    [15438983]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
select
 *
from
 @T1
order by
 cast(substring(Number, 1, isnull(nullif(patindex('%[^0-9]%', Number) - 1, 0), 10000000)) as int);
20 янв 14, 10:29    [15438999]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
sanekoffice
Member

Откуда:
Сообщений: 373
invm,
И вам спасибо) Так покороче будет
20 янв 14, 10:51    [15439095]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
Ennor Tiegael
Member

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

И вы, конечно же, проверили, как это работает? :)
20 янв 14, 11:03    [15439157]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Ennor Tiegael
И вы, конечно же, проверили, как это работает?
Угу. поправочка:
select
 *
from
 @T1
order by
 cast(substring(Number + 'a', 1, isnull(nullif(patindex('%[^0-9]%', Number + 'a') - 1, 0), 10000000)) as int);
20 янв 14, 11:27    [15439286]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Тьфу. Вот так
select
 *
from
 @T1
order by
 cast(substring(Number, 1, isnull(nullif(patindex('%[^0-9]%', Number + 'a') - 1, 0), 10000000)) as int);


Надо меньше спать :)
20 янв 14, 11:32    [15439319]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
Ennor Tiegael
Member

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

Если добавлять символ, т.е. гарантировать, что patindex() всегда что-то найдет, то можно еще проще:
select
 *
from
 @T1
order by
 cast(substring(Number, 1, patindex('%[^0-9]%', Number + 'a') - 1 as int);
20 янв 14, 11:50    [15439471]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить регулярное выражение  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Ennor Tiegael,

Ага. Я и говорю
invm
Надо меньше спать :)
20 янв 14, 12:21    [15439815]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить