Поиск подстроки
Функция
Поиск подстроки в заданной строке.
Спецификация
Варианты:
::=::=::=::=Общие правила
-
< Символьное выражение >в аргументе может иметь следующие типы данных: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 |