Поиск подстроки

Функция

Поиск подстроки в заданной строке.

Спецификация
   

Варианты:

<синтаксис>::=
<начало поиска>::=
<номер вхождения>::=
Общие правила
  1. <Символьное выражение> в аргументе может иметь следующие типы данных: CHAR, VARCHAR, NCHAR, NCHAR VARYING.

  2. Типы данных <строки> и <подстроки> должны быть приводимыми.

  3. Длина <подстроки> не должна быть более 4000.

  4. <Начало поиска> задает начальную позицию для поиска <подстроки>. Отсчет начинается с единицы. Если <начало поиска> не задано, по умолчанию принимается значение 1.

  5. <Номер вхождения> задает порядковый номер искомой подстроки. Отсчет начинается с единицы. Если <номер вхождения> не задан, по умолчанию принимается значение 1.

  6. <Числовое выражение> в <начале поиска> или в <номере вхождения> должно иметь целый тип или приводиться к нему.

  7. Функция POSITION эквивалента функции INSTR (<строка>,<подстрока>,1,1) или INSTR (<строка>,<подстрока>).

    select
    position('БД' in 'СУБД ЛИНТЕР'),
    instr('СУБД ЛИНТЕР','БД',1,1),
    instr('СУБД ЛИНТЕР','БД');
    | 3 | 3 | 3 |
  8. Выполняется поиск подстроки в строке, начиная с заданной позиции и с учетом указанного номера вхождения.

  9. Информация о недопустимых значениях входных параметров не возвращается.

  10. Все аргументы функции могут быть задано <SQL-параметром>, который должен содержать спецификацию типа данных параметра.

    select instr(? (varchar(50)), ? (varchar(10)), ? (int), ? (int));
    Мы едем, едем, едем в далёкие края
    едем
    5
    2
    | 16|
Возвращаемое значение
  1. Номер позиции, с которой размещается найденная в <строке> заданная <подстрока>.

  2. 0, если <строка> имеет нулевую длину, если подстрока не найдена, или входные параметры имеют логически недопустимые значения.

  3. NULL-значение, если длина <подстроки> равна 0.

  4. Тип возвращаемого значения – 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    |