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

Откуда: Нижний Новгород
Сообщений: 845
Добрый день, добрый ALL !

Прошу дать идею.
Получаемую выборку надо упорядочить по полю.

Одна проблема... поле типа CHAR(30) может хранить значения состоящие из цифр, (пример: "0811280215"), а также Начинающиеся со строки состоящей из букв (например "XZ0811280215").

Количество ведущих буквенных символов не фиксировано. Т.е. возмжно наличие занчения вида "ABCD20080501"/"A20080501"/"AD20080501"/....

Всё бы ничего, но при сортировке по полю, нужно Отбросить буквенные символы и сортировать по подстроке состоящей из цифр.

Наведите на мысль - как сделать можно? Спасибо.
1 дек 08, 09:54    [6506961]     Ответить | Цитировать Сообщить модератору
 Re: Оставить в строке только цифры  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
ORDER BY ISNULL(STUFF(S,1, NULLIF(PATINDEX('%[0-9]%',S),0)-1,''),S)
1 дек 08, 10:03    [6507003]     Ответить | Цитировать Сообщить модератору
 Re: Оставить в строке только цифры  [new]
vanoman
Member

Откуда: Нижний Новгород
Сообщений: 845
iap
ORDER BY ISNULL(STUFF(S,1, NULLIF(PATINDEX('%[0-9]%',S),0)-1,''),S)


Большое спасибо!
1 дек 08, 10:09    [6507037]     Ответить | Цитировать Сообщить модератору
 Re: Оставить в строке только цифры  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
vanoman
iap
ORDER BY ISNULL(STUFF(S,1, NULLIF(PATINDEX('%[0-9]%',S),0)-1,''),S)


Большое спасибо!
Я погорячился, наверно. Если в строке цифр вообще нет, то что должно остаться?
Я там ISNULLом саму строку оставляю, а надо-то, наверно, пустую строку?
Если так, то замените последнюю S на ''
1 дек 08, 10:13    [6507061]     Ответить | Цитировать Сообщить модератору
 Re: Оставить в строке только цифры  [new]
vanoman
Member

Откуда: Нижний Новгород
Сообщений: 845
iap
vanoman
iap
ORDER BY ISNULL(STUFF(S,1, NULLIF(PATINDEX('%[0-9]%',S),0)-1,''),S)


Большое спасибо!
Я погорячился, наверно. Если в строке цифр вообще нет, то что должно остаться?
Я там ISNULLом саму строку оставляю, а надо-то, наверно, пустую строку?
Если так, то замените последнюю S на ''


Всё отлично работает. Тут важна сама идея, как вырезать, а что оставить в чисто-символьной строке - это обязуюсь решить сам, никого не дёргая :)

Ещё раз спасибо!
1 дек 08, 10:25    [6507122]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Оставить в строке только цифры  [new]
Super_DJ
Member

Откуда: Königsberg in Preußen
Сообщений: 79
iap,

Как модифицировать приведенный вами пример что бы обрезались символы не только в начале строки но и в конце?
14 сен 11, 11:43    [11274149]     Ответить | Цитировать Сообщить модератору
 Re: Оставить в строке только цифры  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Super_DJ
iap,

Как модифицировать приведенный вами пример что бы обрезались символы не только в начале строки но и в конце?
Например, используя REVERSE?
Правда, громоздко получится. Ну и что?
Можно же для краткости использовать производные таблицы (derived tables)
14 сен 11, 11:48    [11274204]     Ответить | Цитировать Сообщить модератору
 Re: Оставить в строке только цифры  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Super_DJ
iap,

Как модифицировать приведенный вами пример что бы обрезались символы не только в начале строки но и в конце?
Например, используя REVERSE?
Правда, громоздко получится. Ну и что?
Можно же для краткости использовать производные таблицы (derived tables)
А если во всей строке надо нецифры убрать, то вот, например: 9829428
14 сен 11, 12:03    [11274385]     Ответить | Цитировать Сообщить модератору
 Re: Оставить в строке только цифры  [new]
Super_DJ
Member

Откуда: Königsberg in Preußen
Сообщений: 79
iap,

Спаибо, оба ответа оказались полезными.
Для конкретного случая, воспользовался этим примером 9829159 чуть выше вашего поста.
14 сен 11, 12:27    [11274584]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить