Поиск подстроки (INSTR/POSITION)
Функция
Поиск подстроки в заданной строке.
Спецификация
Варианты:
::=::=::=::=Общие правила
-
<Символьное выражение>в аргументе может иметь следующие типы данных:CHAR,VARCHAR,NCHAR,NCHAR VARYING. -
Типы данных
<строки>и<подстроки>должны быть приводимыми. -
Длина
<подстроки>не должна быть более 4000. -
<Начало поиска>задает начальную позицию для поиска<подстроки>. Отсчет начинается с единицы. Если<начало поиска>не задано, по умолчанию принимается значение 1. -
<Номер вхождения>задает порядковый номер искомой подстроки. Отсчет начинается с единицы. Если<номер вхождения>не задан, по умолчанию принимается значение 1. -
<Числовое выражение>в<начале поиска>или в<номере вхождения>должно иметь целый тип или приводиться к нему. -
Функция
POSITIONэквивалента функцииINSTR(<строка>,<подстрока>,1,1)илиINSTR (<строка>,<подстрока>).select position('БД' in 'СУБД ЛИНТЕР'), instr('СУБД ЛИНТЕР','БД',1,1), instr('СУБД ЛИНТЕР','БД'); | 3 | 3 | 3 | -
Выполняется поиск подстроки в строке, начиная с заданной позиции и с учетом указанного номера вхождения.
-
Информация о недопустимых значениях входных параметров не возвращается.
-
Все аргументы функции могут быть задано
<SQL-параметром>, который должен содержать спецификацию типа данных параметра.select instr(? (varchar(50)), ? (varchar(10)), ? (int), ? (int)); Мы едем, едем, едем в далёкие края едем 5 2 | 16|
Возвращаемое значение
-
Номер позиции, с которой размещается найденная в
<строке>заданная<подстрока>. -
0, если<строка>имеет нулевую длину, если подстрока не найдена, или входные параметры имеют логически недопустимые значения. -
NULL-значение, если длина<подстроки>равна0. -
Тип возвращаемого значения –
INT.
Примеры
select rownum,rtrim(firstnam)+' '+ltrim(name) from person where instr(firstnam,'EDWARD')<>0 order by name; | 1 | EDWARD KING | | 2 | EDWARD TRAVIS | | 3 | EDWARD WOOLSEY | | 4 | EDWARD WYLLIS |
select phone,rtrim(firstnam)+' '+ltrim(name) from person where instr(phone,'99',4,2)<>0 order by name; | 257-9999 | | BILL SPIEGEL | | 713-9996 | | GERALD SPIEGEL |
create table tab1 (i int, d dec, c char(5));
create table tab2 (vc varchar(10));
insert into tab1 values(0,2.7,'12345');
insert into tab1 values(-3,1.2, '59202');
insert into tab2 values('ab23cd3456');
insert into tab2 values('cda4978ee5');
select vc,
c,
d,
abs(i+2) as "abs(i+2)",
substr(c,d, abs(i+2)) as "substr",
instr(vc,substr(c,d,abs(i+2))) as "instr"
from tab1,tab2;
| VC | C | D | abs(i+2)| substr | instr |
| ab23cd3456 | 12345 | 2.7 | 2 | 23 | 3 |
| cda4978ee5 | 12345 | 2.7 | 2 | 23 | 0 |
| ab23cd3456 | 59202 | 1.2 | 1 | 5 | 9 |
| cda4978ee5 | 59202 | 1.2 | 1 | 5 | 10 |