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

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

Подскажите, делаю запрос на Oracle
select (substr(WorkInfoAttach,instr(WorkInfoAttach,'\',-1,1)+1)) as ttt
from raif_signal_integration
where raif_signal_integration.RequestID = '000000000001236'

Пример исходных данных : 6679\6517\Ico.jpg
Вовращает: Ico.jpg

Подскажите функцию в SQL, которая может позволить выполнить то же самое (аналог instr).
Т.е. понятно, что первая SUBSTRING, а как высчитать с какого символа считать?

Заранее спасибо!
18 окт 13, 11:53    [14996899]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти функцию  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
pathindex
18 окт 13, 12:00    [14996979]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти функцию  [new]
osokolin
Member

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

Она вроде по аналогии с CHARINDEX работает, т.е. считает с начала, а нужно с конца посчитать

select (SUBSTRING(WorkInfoAttach,(PATINDEX ('%;%',WorkInfoAttach))+1,LEN(WorkInfoAttach))) as ttt
from signal_integration
where signal_integration.ID_запроса = '000000000000236'
18 окт 13, 12:08    [14997080]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти функцию  [new]
KRS544
Member

Откуда:
Сообщений: 497
declare @WorkInfoAttach varchar(255)= '6679\6517\Ico.jpg'

select substring(@WorkInfoAttach,2+len(@WorkInfoAttach)-patindex('%\%',REVERSE(@WorkInfoAttach)) ,patindex('%\%',REVERSE(@WorkInfoAttach)))
18 окт 13, 12:18    [14997199]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти функцию  [new]
KRS544
Member

Откуда:
Сообщений: 497
select RIGHT(@WorkInfoAttach,patindex('%\%',REVERSE(@WorkInfoAttach))-1)

так лучше
18 окт 13, 12:28    [14997287]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти функцию  [new]
Гость333
Member

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

Оба ваших варианта фейлят, если в исходной строке нет ни одного слэша.

Вот вариант, отрабатывающий и на "безслэшевых" данных:
declare @s varchar(1000);
set @s = '6679\6517\Ico.jpg';
select right(@s, isnull(nullif(charindex('\', reverse(@s)), 0) - 1, len(@s)))
18 окт 13, 12:33    [14997343]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти функцию  [new]
KRS544
Member

Откуда:
Сообщений: 497
Гость333,
set @WorkInfoAttach='\'+@WorkInfoAttach
;)
18 окт 13, 12:35    [14997370]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти функцию  [new]
Гость333
Member

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

Ну или так, периодически забываю про этот трюк.
18 окт 13, 12:45    [14997484]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти функцию  [new]
osokolin
Member

Откуда:
Сообщений: 9
KRS544, БОЛЬШОЕ СПАСИБО!
Вот так отлично работает
 select RIGHT(@WorkInfoAttach,patindex('%\%',REVERSE(@WorkInfoAttach))-1)
18 окт 13, 15:55    [14999099]     Ответить | Цитировать Сообщить модератору
 Re: Не могу найти функцию  [new]
Гость333
Member

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

У вас во всех существующих значениях WorkInfoAttach гарантированно содержится хотя бы один слэш? И во всех будущих значениях тоже содержится?
18 окт 13, 16:01    [14999157]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить