ORACLE instr函数
语法
![](https://img2023.cnblogs.com/blog/2755468/202307/2755468-20230712215542451-1567658939.png)
系列函数:INSTR 系列函数总共有5 个,常用为 instr函数,其他4个都是变体。这些函数之间区别仅在于入参 string数据类型的限制。Instr函数入参string类型要求为: char, varchar2, nchar(采用unicode标准字符集存储), nvarchar2, clob(character large object), nclob,
而除instr函数外的其他instrb, instrc, instr2, instr4 函数增入参string 均不允许使用clob,nclob 类型数据。
函数用途: instr函数主要用来在源字符串中查找目标字符串所在的位置。如果有匹配到,则返回目标字符串所在位置序号。如无匹配到,则返还0。
参数说明:
string: 源字符串(必需)。
substring:目标字符串(必需)。
positon:源字符串开始匹配位置, 非0整数(或者能被最终隐式转换为整数类型)。选填,不填时默认为1,即从源字符串左边第一个字符开始匹配。当为正数时,比如2,代表从源字符从左向右第二个字符开始从左向右匹配,为负数时,比如-2,代表从源字符从右向左(倒数)第2个字符开始,依然从右边向左开始匹配查询。
occurrence:目标字符在源字符串中按position 参数条件匹配到的次数(即第几次被匹配到).
示例:
(1) 从"corporate floor"中顺序查找"or":
SELECT INSTR('CORPORATE FLOOR','OR',3,2) INSTRING FROM DUAL;
结果为14,即从'CORPORATE FLOOR'字符串顺序第三个字符'R'开始,顺序向右查找字符'OR'第二次出现的位置,即'CORPORATE FLOOR'最末尾的两个字符'OR',此时从左到右计数最末尾'OR'在源字符串'CORPORATE FLOOR'中的位置,为14(空格也算一个字符),查询结束.
(2) 从"corporate floor"中倒序查找"or":
SELECT INSTR('CORPORATE FLOOR','OR',-3,2) REVERSE_INSTRING FROM DUAL;
结果为2,即从'CORPORATE FLOOR'字符串倒序第三个字符'O'开始,倒序向左查找字符'OR'第二次出现的位置,即'CORPORATE FLOOR'的第二、三两个字符'OR',此时从左到右计数到第二、三个字符'OR'在源字符串'CORPORATE FLOOR'中的位置,为2,查询结束.
(3) 通过instrb函数从"corporate floor"中顺序查找"or":
SELECT INSTRB('CORPORATE FLOOR','OR',5,2) "Instring in bytes" FROM DUAL;
instrb以字节代替字符,以单字节字符集(如ASCII)查询时跟instr效果一样,以双字节字符集(如GBK,UNICODE)查询时一个字符占2个字节,因此返还结果与INSTR函数不一致。上面语句,在单字节字符集系统查询结果为14,而在双字节字符集查询结果为27。
参考文档 ORALCE官网 SQL Language Reference:https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/About-SQL-Functions.html#GUID-D51AB228-518C-4213-8BD4-F919623D105E