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