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,”中是否存在,答案很显然是不存在的。

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

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

目录
相关文章
|
5月前
|
SQL Oracle 关系型数据库
Oracle之日期计算相关函数
Oracle之日期计算相关函数
46 0
|
5月前
|
SQL Oracle 关系型数据库
Oracle之regexp系列函数详解
Oracle之regexp系列函数详解
163 1
|
8月前
|
存储 SQL Oracle
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
70 0
|
4月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
39 0
|
4月前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
69 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
24天前
|
Oracle 算法 关系型数据库
Oracle常用系统函数之数字类函数:数字的魔术师
【4月更文挑战第19天】Oracle数据库中的数字类函数是数字处理的魔术师,包括`ROUND`(四舍五入),`CEIL`和`FLOOR`(向上/下取整),以及`ABS`(计算绝对值)。还有`MOD`、`TRUNC`和`POWER`等函数,提供求余数、截断和计算幂的功能。熟练运用这些函数能提升数据管理效率,让处理数字变得更简单、有趣。
|
3月前
|
SQL Oracle 关系型数据库
Oracle查询优化-聚集函数
【2月更文挑战第5天】【2月更文挑战第13篇】聚集函数
20 4
|
4月前
|
存储 SQL Java
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(一)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
36 0
|
4月前
|
SQL Oracle 算法
Oracle函数
Oracle函数
98 1
|
5月前
|
SQL Oracle 关系型数据库
Oracle之有哪些日期计算函数?
Oracle之有哪些日期计算函数?
117 0