Oracle SQL中实现indexOf和lastIndexOf功能,substr和instr用法

Oracle SQL中实现indexOf和lastIndexOf功能

Oracle, SQL, indexOf, lastIndexOf
今天遇到一个问题,需要将一个格式为1_2_3这样的字符串拆解组成1_3的串,并用SQL更新数据库。
在Oracel中,可以用substr和INSTR函数来实现此功能。

substr的第三个参数为1时,实现的是indexOf功能。
substr的第三个参数为-1时,实现的是lastIndexOf功能。

最后的SQL语句如下:
update ebms_data_table t set t.ref_name = substr(t.name, 0, INSTR(t.name, '_', 1, 1))|| substr(t.name, INSTR(t.name, '_', -1, 1)+1);


(二)
再给大家举个例子:

select
i1.name,
instr(i1.name, '司', 1) + 1 as 公司出现的位置,
instr(i1.name, '分公司', 1) as 分公司出现的位置,
substr(i1.name,
instr(i1.name, '司', 1) + 1,
((instr(i1.name, '分公司', 1)) - (instr(i1.name, '司', 1) + 1))) as subname
from insurance_company1 i1
where i1.name like '%股份有限公司%分公司'
and i1.upcustomer like '%股份有限公司'

查询结果如下:


名字全称 司出现的位置 分公司出现的位置 subName
1 天安保险股份有限公[color=red]司[/color]伊犁[color=red]分公司[/color] 11 13 伊犁
2 中国大地财产保险股份有限公[color=red]司[/color]新疆[color=red]分公司[/color] 15 17 新疆
3 中国平安财产保险股份有限公[color=red]司[/color]乌苏[color=red]分公司[/color] 15 17 乌苏
4 中国平安财产保险股份有限公[color=red]司[/color]新疆[color=red]分公司[/color] 15 17 新疆
5 中国平安人寿保险股份有限公[color=red]司[/color]新疆[color=red]分公司[/color] 15 17 新疆
6 中国人民财产保险股份有限公[color=red]司[/color]阿克苏地区[color=red]分公司[/color] 15 20 阿克苏地区
7 中国人民财产保险股份有限公[color=red]司[/color]阿勒泰地区[color=red]分公司[/color] 15 20 阿勒泰地区
8 中国人民财产保险股份有限公[color=red]司[/color]昌吉回族自治州[color=red]分公司[/color] 15 22 昌吉回族自治州


后边的subName就是我成功截取的名字,就是我要截取的全名字的中后边不同分公司的字段,目的就是为了要获取不同的字段,然后进行分析。

这里是substr和instr的综合使用。

substr(stirng1,strat,length);截取功能;
解析一下:string1是你要截取的字符串,strat是要开始截取的位置,length是你要截取多少个字符串。
instr(string1,string2,end);是检索功能,
解析一下:string1是你要检索的字符串,string2是你在string1中要查找的字符串,end的意思1代表从字符串的开始检索,-1代表中字符串的末尾开始检索。具体返回值
  如果
  string1 为零长度
  InStr返回 0
  string1 为 Null
  InStr返回 Null
  string2 为零长度
  InStr返回 Start 的值
  string2 为 Null
  InStr返回 Null
  string2 找不到
  InStr返回 0
  在 string1 中找到string2
  InStr返回 找到的位置
  start 值 > len(string1 )值
  InStr返回 0;

当instr将我们要检索字段的位置找到后,即返回所在的位置数据,我们就是可以利用substr函数进行截取,length就是我们我们检索出来的数字的差额。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值