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