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

Откуда:
Сообщений: 795
Приветствую!
MSSQL 2012

есть строки такого вида:

16к_1с_1-01.svg

надо сделать такого:

16-1-1 (то есть все цифры, кроме всех символов и букв ну и кроме последней 01)

я это сделал, но может есть какой-то инструмент попроще?


select left(name, 2) +'-'+ 
case 
     when right(left(name, 6) , 2) like '%с%' or right(left(name, 6) , 2) like '%c%'
	 then right(left(name, 5) , 1)
	 else right(left(name, 6) , 2)
	 end
	 +'-'+
case
     when right(left(name,9), 1)  like '%[0-9]%' and left(name, 2) = 17
	 then right(left(name,9), 2)
	 else left(right(name, 8), 1)
	 end
from IMG
11 апр 16, 14:24    [19042581]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
выборка чисел из строки
11 апр 16, 14:40    [19042711]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
mishanya3624
16-1-1 (то есть все цифры, кроме всех символов и букв ну и кроме последней 01)
"-" - это тоже цифра?
11 апр 16, 14:40    [19042721]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
Glory
Member

Откуда:
Сообщений: 104760
mishanya3624
и кроме последней 01)

01 - это две цифры, а не "ну кроме последней"
11 апр 16, 14:44    [19042762]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
mishanya3624
Member

Откуда:
Сообщений: 795
iap
выборка чисел из строки


Спасибо!
Конечно нагроможденней получилось, но так правильней все исключения захватывает, которые возможны в будущем.

select id,
 substring( 
 (select substring(t.name,v.number,1)
  from IMG t join master.dbo.spt_values v
  on v.type = 'P' and v.number between 1 and len(t.name) and substring(t.name,v.number,1) like '[0-9]'
  where t.id = t1.id
  for xml path(''))
 ,1,len((select substring(t.name,v.number,1)
  from IMG t join master.dbo.spt_values v
  on v.type = 'P' and v.number between 1 and len(t.name) and substring(t.name,v.number,1) like '[0-9]'
  where t.id = t1.id
  for xml path('')))-2)  name
  from IMG t1
12 апр 16, 10:31    [19045818]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
mishanya3624
Member

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

yes)
12 апр 16, 10:31    [19045822]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
mishanya3624
Member

Откуда:
Сообщений: 795
iap
mishanya3624
16-1-1 (то есть все цифры, кроме всех символов и букв ну и кроме последней 01)
"-" - это тоже цифра?

это не криминально, можно и без дефиса.
12 апр 16, 10:32    [19045825]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
Glory
Member

Откуда:
Сообщений: 104760
mishanya3624
Glory,

yes)

Что yes, млин ?
Задачу надо формулировать правильно
Тогда и решение будет красивым
12 апр 16, 10:33    [19045833]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
iap
Member

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

учтите только, что к таблице master.dbo.spt_values не все могут иметь доступ.
В принципе, надо создать свою таблицу с числами от 0 до, например, миллиона,
проиндексировать её и использовать при необходимости. Требуется очень часто.
12 апр 16, 10:33    [19045834]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
o-o
Guest
iap
учтите только, что к таблице master.dbo.spt_values не все могут иметь доступ.

вот это вряд ли.
если просто создать логин и вообще никуда его не мапить,
к таблице доступ у него будет.
и чтобы его запретить, нужен deny.
если это персональный deny, то надо мапить юзера в мастер (и кто на это пойдет?)
а если денаить всему паблику, то обломаются все, кроме сиадмина.
неужели кто-то страдает подобной фигней?
12 апр 16, 11:19    [19046057]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
o-o
iap
учтите только, что к таблице master.dbo.spt_values не все могут иметь доступ.

вот это вряд ли.
если просто создать логин и вообще никуда его не мапить,
к таблице доступ у него будет.
и чтобы его запретить, нужен deny.
если это персональный deny, то надо мапить юзера в мастер (и кто на это пойдет?)
а если денаить всему паблику, то обломаются все, кроме сиадмина.
неужели кто-то страдает подобной фигней?
Детали не знаю, но у нас тут был облом однажды.
12 апр 16, 11:21    [19046072]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать только цифры из строк, где есть и буквы  [new]
o-o
Guest
iap
o-o
пропущено...

вот это вряд ли.
если просто создать логин и вообще никуда его не мапить,
к таблице доступ у него будет.
и чтобы его запретить, нужен deny.
если это персональный deny, то надо мапить юзера в мастер (и кто на это пойдет?)
а если денаить всему паблику, то обломаются все, кроме сиадмина.
неужели кто-то страдает подобной фигней?
Детали не знаю, но у нас тут был облом однажды.

всегда были и есть желающие не давать доступ вообще ни к чему на сервере,
но ведь с таким же успехом извращенец может заденаить доступ ко всем системным таблицам базы.
т.е. мало, что все видят лишь "им доступное",
некоторым хочется, чтобы получали явный The SELECT permission was denied... .
тогда надо еще всем советовать не пользоваться системными таблицами
12 апр 16, 11:33    [19046173]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить