ORACLE instr函数

发布时间 2023-07-12 22:04:29作者: ROGER_FEDERER

语法

 

 

   系列函数: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