[SQL] Как работает INSTR( ), если 2 подстроки

vladi1

Как работает INSTR(strike , substrike) если в строке strike 2 подстроки...
Например,
Strike = 'abcd abc'
substrike = 'abc'
instr(strike, substrike); выдает 1
Почему он не реагирует на 2 подстроку?
Как сделать так, чтобы реагировать на 2 подстроку? т.е.
instr('abcd abc', 'abc') = 6
instr('abc abcd', 'abc') = 1
instr('abcd abcd', 'abc') = 0
instr('bc abc', 'abc') = 4
instr('abc', 'abc') =1
.............................

sinet

Выдели по словам да и сравни в лоб.

vladi1

не, нужно универсальный скрипт или еще че-нить...
'abcd abc' 'abc' - example
надо, чтоб sub='abc'а strike='.........', где '....' = SELECT'ом там еще чего-то...
И чего разбивать по словечкам всё это дело?

xz_post

А нельзя что ли повторно вызвать фунцкию и указать начальную позицию символа для поиска (в sql server это запросто)

sinet

Что то я плохо понимаю, что тебе надо.
Ты хочешь найти первое вхождение заданного СЛОВА в строке?
Причём в строке может быть произвольное кол-во слов.

vladi1

нет, чтобы на всякую херню типа 'abcd' не реагировало, если надо 'abc'

vladi1

попробую

sinet

Всё равно ничего не понял, но может поможет:
Ищи не 'abc', а ' abc '.

vladi1

Спасибо, дельное предложение!
Может, ты еще знаешь какой синтаксис ф-ции instr если substring={'+','-',':',';'....} - массив из разделителей
чтобы вместо substring in('+', '-'...) написать instr(strike, '+','-' только я не знаю как правильно '+', '-' употребляется в instr'е

sinet

Наверное нельзя так...
LOCATE(substr,str)
POSITION(substr IN str)
Возвращает позицию первого вхождения подстроки substr в строку str. Если подстрока substr в строке str отсутствует, возвращается 0.
LOCATE(substr,str,pos)
Возвращает позицию первого вхождения подстроки substr в строку str, начиная с позиции pos. Если подстрока substr в строке str отсутствует, возвращается 0.
INSTR(str,substr)
Возвращает позицию первого вхождения подстроки substr в строку str. То же, что и двухаргументная форма функции LOCATE за исключением перемены мест аргументов.
Они все только со строками работают.

vladi1

Все, спасибо, я вот так сделал:
for i..1 lenght(strike) loop
if instr( ' +-*/=<>%.@:', substr(strike, i, 1) )>0 then ........
end loop;
Может, конечно, я неправильно обьяснил(если так, то извини! но мне именно это было надо
Оставить комментарий
Имя или ник:
Комментарий: