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

Откуда:
Сообщений: 457
Добрый день!

Интересная проблемка - придумать выражение для Like, чтобы отбирать любые значения только из цифровых символов.
Никак не могу придумать одиночное выражение типа '[0-9]..'.
[] это ведь для одиночного символа, а длина переменная.
А выбираться должны '1', '200456', '200000056' и т.д., но не '.400034.4', в001.456'

М.б. и не существует такого решения.
1 апр 15, 12:43    [17458790]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1433
Draginsv,

isnumeric() + like ?
1 апр 15, 12:51    [17458839]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
LIKE '%[0-9]%'

не подходит?
1 апр 15, 12:52    [17458845]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Используйте CLR функции для анализа, С# имеет широкий набор возможностей. Хотя это может сказаться на производительности и удобстве сопровождения.
1 апр 15, 12:58    [17458877]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Draginsv
придумать выражение для Like, чтобы отбирать любые значения только из цифровых символов.
not like '%[^0-9]%'
1 апр 15, 12:59    [17458886]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Draginsv
Добрый день!

Интересная проблемка - придумать выражение для Like, чтобы отбирать любые значения только из цифровых символов.
Никак не могу придумать одиночное выражение типа '[0-9]..'.
[] это ведь для одиночного символа, а длина переменная.
А выбираться должны '1', '200456', '200000056' и т.д., но не '.400034.4', в001.456'

М.б. и не существует такого решения.


Существует

^\d+$
1 апр 15, 12:59    [17458888]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
invm
Draginsv
придумать выражение для Like, чтобы отбирать любые значения только из цифровых символов.
not like '%[^0-9]%'

Полагаю, что так правильнее.
Спасибо коллега.
1 апр 15, 13:06    [17458949]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
o-o
Guest
SQL2008
invm
not like '%[^0-9]%'

Полагаю, что так правильнее.

еще бы:
LIKE '%[0-9]%' 
переводится как: отобрать все то, где хоть одна цифра есть.

а
not like '%[^0-9]%'
НЕ отбирает все то, где есть хоть что-то, отличное от цифры, т.е. отбирает состоящее ТОЛьКО из цифр
1 апр 15, 13:15    [17459021]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
o-o, полностью согласен. Я уже писал.
1 апр 15, 13:23    [17459077]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
o-o
Guest
SQL2008,
да я же не спорю.
просто вы сперва так полагали, потом иначе, а я пишу, как оба варианта переводятся. для сомневающихся :)
1 апр 15, 13:26    [17459104]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
Draginsv
Member

Откуда:
Сообщений: 457
Протестировал not like '%[^0-9]%' да работает.
Спасибо.
Пробую
select f1 from t1 where f1 not like '%[^0-9]%' and len(f1)<10


ms вылетает.
1 апр 15, 13:28    [17459116]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
Draginsv
Member

Откуда:
Сообщений: 457
ms вылетает в конструкторе запросов
в отдельном окне редактора все ок
1 апр 15, 13:36    [17459196]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
Draginsv
Member

Откуда:
Сообщений: 457
Не знал о таком операторе исключающем [^...] полезная штука.
1 апр 15, 13:40    [17459227]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
o-o
Guest
Draginsv,

оператор это LIKE
а "^" это Wildcard character.
в статью по ссылке загляните, вдруг еще что-то новое узнаете
1 апр 15, 13:50    [17459304]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
Draginsv
Member

Откуда:
Сообщений: 457
o-o,
Согласен.
Не правильно выразился.
Не сработала мысль о применении одновременно not и ^.
А вообще классно, СПАСИБО.
1 апр 15, 14:14    [17459459]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
SQL2008
invm
пропущено...
not like '%[^0-9]%'


Полагаю, что так правильнее.
Спасибо коллега.
Но ещё правильнее (ИМХО) так:
not like '%[^0123456789]%'
С диапазонами осторожнее надо...
1 апр 15, 14:18    [17459494]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
iap
SQL2008
пропущено...

Полагаю, что так правильнее.
Спасибо коллега.
Но ещё правильнее (ИМХО) так:
not like '%[^0123456789]%'
С диапазонами осторожнее надо...

Т.е. вы полагаете, что это принципиально отличается от
not like '%[^0-9]%' 

приведите, пожалуйста, пример того, что это разные вилдкарты!
1 апр 15, 14:40    [17459604]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
iap
not like '%[^0123456789]%'
С диапазонами осторожнее надо...

Прошу прощения за ерничество, но
"С регулярными выражениями осторожнее надо..."
перечислим все символы кроме цифр
  ... not like '%a%'
and not like '%b%'
and not like '%c%'
 ...
and not like '%Z%'
and not like '%.%'
and not like '%,%'
 ...
and not like '%+%'
1 апр 15, 14:45    [17459645]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
ну таки можно isnumeric + отдельно проверку на . - +
1 апр 15, 14:49    [17459681]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4248
Ivan Durak
ну таки можно isnumeric + отдельно проверку на . - +

c isnumeric получится короче, а мы не ищем легких путей!
1 апр 15, 14:52    [17459706]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
SQL2008
приведите, пожалуйста, пример того, что это разные вилдкарты!
C цифрами не приведу.
С другими символами - запросто.
Только надо потратить время на поиск подходящего для демонстрации COLLATE.
C одной стороны, у меня нет гарантии, что не существует COLLATE,
в котором указанный диапазон содержит все цифры и не содержит какой-нибудь не-цифры.
С другой стороны, мне не влом написать 10 цифр вместо 3 символов. Зато поиметь-таки гарантию.
1 апр 15, 14:54    [17459717]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
SQL2008
iap
not like '%[^0123456789]%'
С диапазонами осторожнее надо...

Прошу прощения за ерничество, но
"С регулярными выражениями осторожнее надо..."
перечислим все символы кроме цифр
  ... not like '%a%'
and not like '%b%'
and not like '%c%'
 ...
and not like '%Z%'
and not like '%.%'
and not like '%,%'
 ...
and not like '%+%'


едрит мадрит, когда ж нам ниспошлют ману и перепелов, чтобы можно было так

SIMILAR TO '^[-+]?\d+$'


или так

SIMILAR TO '^[-+]?\s*\d+$'
1 апр 15, 14:56    [17459731]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
churupaha
едрит мадрит, когда ж нам ниспошлют ману и перепелов, чтобы можно было так

SIMILAR TO '^[-+]?\d+$'
Не, едрит мадрит, нам лучше попроще:
not like '%[^0-9]%'

Ivan Durak
ну таки можно isnumeric + отдельно проверку на . - +
А ещё на что нужно проверку? :-)
select ISNUMERIC('1D5'), ISNUMERIC('1E5'), ISNUMERIC('1,500')
2 апр 15, 14:38    [17464546]     Ответить | Цитировать Сообщить модератору
 Re: Like '?????'  [new]
Gluck_13
Member

Откуда: Санкт-Петербург
Сообщений: 207
alexeyvg
А ещё на что нужно проверку? :-)
select ISNUMERIC('1D5'), ISNUMERIC('1E5'), ISNUMERIC('1,500')

И, до кучи,
, ISNUMERIC('1,5,0,0.5,0,0')
3 апр 15, 07:32    [17467300]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить