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

Откуда:
Сообщений: 165
Привет!

Нужно проверить строку на наличие ТОЛЬКО цифр, при этом строка не должна быть пустой или NULL и не должна превышать 10 символов в длину.
для примера:

declare @t table (s varchar(10))
insert @t
select ';asdfA' union all
select '@' union all
select '123ASDFasd' union all
select '123456789012345' union all
select '123' union all
select 'asd' union all
select 'asd123'

select * from @t where s like ??????????

должна вернуть только 123.

бьюсь очень долго...
пробовал такое:
select * from @t 
where  s not like '%[a-Z]%'
       and not (coalesce(rtrim(s), '') = '') 
       and (len(s) <= 10)

но такой вариант пропускает спецсимволы...

Помогите пожалуйста
2 авг 12, 18:44    [12954879]     Ответить | Цитировать Сообщить модератору
 Re: проверка на цифры в строке  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
whitebeast,

ISNUMERIC
2 авг 12, 18:56    [12954934]     Ответить | Цитировать Сообщить модератору
 Re: проверка на цифры в строке  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Огромное спасибо! Одной простой функцией все решается :)

select * from @t 
where  ISNUMERIC(s)=1 
       and (len(s) <= 10)
2 авг 12, 18:59    [12954944]     Ответить | Цитировать Сообщить модератору
 Re: проверка на цифры в строке  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
whitebeast
Огромное спасибо! Одной простой функцией все решается :)
Только учтите:
select ISNUMERIC('0e1')
2 авг 12, 19:01    [12954952]     Ответить | Цитировать Сообщить модератору
 Re: проверка на цифры в строке  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
Ничего ей не решается
declare @t table (s varchar(30))

insert @t
select ';asdfA' union all
select '@' union all
select '123ASDFasd' union all
select '123456789012345' union all
select '123' union all
select 'asd' union all
select 'asd123' union all
select '+'

select
 *
from
 @t 
where
 s not like '%[^0-9]%'
 and len(s) <= 10
 
select
 *
from
 @t 
where
 isnumeric(s) = 1
 and len(s) <= 10
2 авг 12, 19:03    [12954959]     Ответить | Цитировать Сообщить модератору
 Re: проверка на цифры в строке  [new]
whitebeast
Member

Откуда:
Сообщений: 165
invm, хм... чем же отличается + от @ ??? точно такой же спец символ
2 авг 12, 19:12    [12955006]     Ответить | Цитировать Сообщить модератору
 Re: проверка на цифры в строке  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
whitebeast,

Почитайте в документации для чего предназначена функция ISNUMERIC. Особо уделите внимание примечаниям.
2 авг 12, 19:26    [12955051]     Ответить | Цитировать Сообщить модератору
 Re: проверка на цифры в строке  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Спасибо. Буду знать!
2 авг 12, 19:34    [12955082]     Ответить | Цитировать Сообщить модератору
 Re: проверка на цифры в строке  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
ошибка при конвертации
преобразовать string в int

Если же строка должна быть только из цифр, то всё намного проще.
Такая строка должна удовлетворять условию
S NOT LIKE '%[^0-9]%'
2 авг 12, 22:00    [12955370]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить