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

Откуда:
Сообщений: 1102
в таблице есть поле с названиями инструмента и номера кабинета (через "-"). из этого нужно получить только номер кабинета.
например, rt78sgt-88, xcvbc-491a, poogt-111 . использую след запрос:
RIGHT(Nazvanie, ISNULL(NULLIF (CHARINDEX('-', Nazvanie), 0) - 1, LEN(Nazvanie))) AS [Nom Kab]

вроде работает, но не так как хотелось бы. некоторые значения получены правильно, некоторые обрезаются с доп символом "-", а некоторые, наоборот, с недостающим. то есть должно быть 88, 491а, 111, однако я получаю -88, 491а, 11. подскажите, плз, где ошибка??

К сообщению приложен файл. Размер - 18Kb
12 янв 17, 23:39    [20100663]     Ответить | Цитировать Сообщить модератору
 Re: считать символы в слове  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7511
seeerg_23,

with t as (
select 'rt78sgt-88' Nazvanie
union all
select 'xcvbc-491a'
union all
select 'poogt-111'
)
select 
  right(Nazvanie, len(Nazvanie) - charindex('-', Nazvanie))
from t

----------
88
491a
111

(3 row(s) affected)
12 янв 17, 23:51    [20100675]     Ответить | Цитировать Сообщить модератору
 Re: считать символы в слове  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7511
Relic Hunter,

with t as (
select 'rt78sgt-88' Nazvanie
union all
select 'xcvbc-491a'
union all
select 'poogt-111'
union all
select 'n-abc-777'
)
select 
  right(right(Nazvanie, len(Nazvanie) - charindex('-', Nazvanie)), len(right(Nazvanie, len(Nazvanie) - charindex('-', Nazvanie))) - charindex('-', right(Nazvanie, len(Nazvanie) - charindex('-', Nazvanie))))
from t

----------
88
491a
111
777

(4 row(s) affected)
13 янв 17, 00:07    [20100700]     Ответить | Цитировать Сообщить модератору
 Re: считать символы в слове  [new]
o-o
Guest
select right(Nazvanie, charindex('-', reverse(Nazvanie)) - 1)
from t;
13 янв 17, 00:18    [20100731]     Ответить | Цитировать Сообщить модератору
 Re: считать символы в слове  [new]
iljy
Member

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

with t(Nazvanie) as (
  select 'rt78sgt-88'   union all
  select 'xcvbc-491a'  union all
  select 'poogt-111'   union all
  select 'n-abc-777'   union all
  select '3511'
)
select right(Nazvanie, isnull(nullif(CHARINDEX('-', reverse(Nazvanie)),0) - 1, 8000))
from t
13 янв 17, 00:25    [20100744]     Ответить | Цитировать Сообщить модератору
 Re: считать символы в слове  [new]
Владислав Колосов
Member

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

автор
в таблице есть поле с названиями инструмента и номера кабинета (через "-"). из этого нужно получить только номер кабинета.
например, rt78sgt-88, xcvbc-491a, poogt-111


постановка задачи говорит о том, что данные не является атомарными и не соответствуют первой нормальной форме. Таким образом, говорить о применении реляционной алгебры к этим данным вообще не имеет смысла.
Первое, что Вам необходимо сделать - это нормализовать данные соответственно требованиям и сохранить в таблицах.
Нормализацию можно произвести не обязательно средствами SQL сервера.
13 янв 17, 10:26    [20101522]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить