oracle函数:instr

简介: instr函数是判断在某一个字符串中是否包含指定的字符串instr返回要截取的字符串在源字符串中的位置用法1:select instr('experiment','per') from dual;此函数返回的...

instr函数是判断在某一个字符串中是否包含指定的字符串

instr返回要截取的字符串在源字符串中的位置

用法1:

select instr('experiment','per') from dual;

此函数返回的是:3

由此可以看出索引是从1开始的(如果查不到就会返回0)

此函数的格式是:instr(sourceString , targetString);

sourceString表示源字符串,targetString表示目标字符串

用法2:

select instr('experiment','e',1,3) from dual;
此函数返回的是8

这种用法中最后的1和3分别代表:

1代表:从第1个字符开始查,

3代表:目标字符出现在源字符的第3次的位置

此函数的格式是;instr(sourceString,targetString,startPosition,numPosition)

startPosition表示:从源字符串的第几个位置开始;

numPosition表示:从目标字符在源字符串的第几次出现;

对比用法1和用法2我们可以看到:startPosition和numPosition是可选参数。

注意:

在使用instr的时候记得要在前后两个字符串中拼接“特定字符”,例如“,”,在我们的项目中就有这样血一样的教训,我们来看例子:

SELECT *
  FROM tabel_1 t1, table_2<span style="font-family:Arial, Helvetica, sans-serif;"> t2</span>
 WHERE .....--一些条件
   and INSTR( t2.ids , t1.id ) > 0

我们这样写的目的是看t1.id在t2.ids中是否存在,我们假定:

t2.ids是一个“123,1234,12345”这样形式的字符串
t1.id为“12”

我们乍一看就认为是:t1.id是在t2.ids中是不存在的

但事实上呢?t1.id在t2.ids中是否存在呢?

答案是存在的,为什么呢?

当你这样写的时候,他就会在“123,1234,12345”中查找有没有“12”这个字符串,很显然有,还不只一处....(123,1234,12345”

这样写是不会报错的,但是数据结果呢?差别是非常大的,这样反应给用户的全部都是错误数据,当用户反馈这样的bug的时候,大多数开发人员都是让用户复现,但是这样的错误能复现的了吗?打死你都复现不了,就是时不时的报一个bug。

所以在使用instr的时候切记在两个字符串的前后拼接特殊字符。

针对以上的问题解决方案就是:

SELECT *
  FROM tabel_1 t1, table_2<span style="font-family:Arial, Helvetica, sans-serif;"> t2</span>
 WHERE .....--一些条件
   and INSTR(',' || t2.ids || ',', ',' || t1.id || ',') > 0
这样写的话t2.ids就会变成: , 123,1234,12345 ,

t1.id就会变成:“,12,

这样写的话他就会查“,12,”在“,123,1234,12345,”中是否存在,答案很显然是不存在的。

这样就会达到我们预期的效果。

所以请大家一定要切记在两个字符串的前后拼接特殊字符!!!

目录
相关文章
|
4月前
|
SQL Oracle 算法
|
4月前
|
SQL Oracle 关系型数据库
|
4月前
|
SQL Oracle 关系型数据库
Oracle|内置函数之INSTR
【7月更文挑战第5天】
|
4月前
|
Oracle 关系型数据库 数据挖掘
|
6月前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
110 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
4月前
|
Oracle 关系型数据库 数据挖掘
|
6月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
74 0
|
5月前
|
存储 Oracle NoSQL
Oracle中decode函数详解
Oracle中decode函数详解
|
5月前
|
Oracle 关系型数据库 大数据
oracle递归函数
oracle递归函数
|
6月前
|
NoSQL Oracle 关系型数据库
MongoDB与Oracle:管道函数兼容之道
【4月更文挑战第20天】
59 2