ORACLE INSTR函数

INSTR系列函数在OracleSQL中用于在源字符串中查找目标字符串的位置。它们包括INSTR和四个变体,主要区别在于对数据类型的限制。INSTR函数支持多种字符串类型,而其他变体不支持CLOB和NCLOB。函数接受四个参数,返回目标字符串在源字符串中的位置,若未找到则返回0。示例展示了正向和反向查找以及在不同字符集下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值