Oracle SQL中实现indexOf和lastIndexOf功能,substr和instr用法
博客分类: oracle
PL/SQL instrsubstrlastindexofindexoforacle . 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 天安保险股份有限公司伊犁分公司 11 13 伊犁
2 中国大地财产保险股份有限公司新疆分公司 15 17       新疆
3 中国平安财产保险股份有限公司乌苏分公司 15 17 乌苏
4 中国平安财产保险股份有限公司新疆分公司 15 17 新疆
5 中国平安人寿保险股份有限公司新疆分公司 15 17 新疆
6 中国人民财产保险股份有限公司阿克苏地区分公司 15 20 阿克苏地区
7 中国人民财产保险股份有限公司阿勒泰地区分公司 15 20 阿勒泰地区
8 中国人民财产保险股份有限公司昌吉回族自治州分公司 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就是我们我们检索出来的数字的差额。

select
       i1.fdisplayname,
       instr(i1.fdisplayname, '事',1,1)+1 as 事,
       instr(i1.fdisplayname, '业',1,2)+1 as 业,
       substr(i1.fdisplayname,
              instr(i1.fdisplayname, '事',1,1)+1,
              ((instr(i1.fdisplayname, '业',1,2)) - (instr(i1.fdisplayname, '事',1,1)+1))) as subname
  from SHENZHENJM1222.B i1

分三步:

1.

select
       i1.fdisplayname,
       instr(i1.fdisplayname, '事',1,1)+1 as 事,
       instr(i1.fdisplayname, '业',1,2)+1 as 业              
  from SHENZHENJM1222.B i1

第二部:

select
substr(i1.fdisplayname,
instr(i1.fdisplayname, '事',1,1)+, ((instr(i1.fdisplayname, '业',1,2)+) - (instr(i1.fdisplayname, '事',1,1)+)))
as subname from SHENZHENJM1222.B i1

如果想改变边界值,只需+后面的数字即可

oracle截取字符串区间段的一部分字符串的更多相关文章

  1. oracle截取字段中的部分字符串

    使用Oracle中Instr()和substr()函数: 在Oracle中可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符. 其语法为: instr(sourceString,de ...

  2. Oracle 截取字符串(截取固定分隔符中间的字符

    #### Oracle 截取字符串(截取固定分隔符中间的字符) #### ####  oracle 取固定分隔符之间的字符--方法一 substr+ instrSELECT  substr('12JP ...

  3. Oracle截取字符串和查找字符串

    oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 常用函数:substr和instr 1.SUBSTR(string,s ...

  4. Oracle截取字符串函数和查找字符串函数,连接运算符||

    参考资料:Oracle截取字符串和查找字符串 oracle自定义函数学习和连接运算符(||) oracle 截取字符(substr),检索字符位置(instr) case when then else ...

  5. oracle截取字符串,定索引

    转载:https://www.cnblogs.com/qmfsun/p/4493918.html 使用Oracle中Instr()和substr()函数: 1 2 3 4 5 6 7 8 9 10 1 ...

  6. oracle截取某个字符前面的字符串

    已验证. 要求:A.数据库表中的一个字符串 可能含有"+" 例:ORC+001 也可能不含“+” B.要求如果该字符串含有“+”,则取“+”之前的字符 例:ORC+001 取ORC ...

  7. ORACLE常用数值函数、转换函数、字符串函数

    本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思的一些函数.分二类介绍,分别是: 著名函数篇 -经常用到的函数 非著名函数篇-即虽然很少用到,但某些情况下却很实用 注:N表 ...

  8. Oracle中的NULL、’’(空字符串)以及’_’(空格)

    本文首发于 http://youngzy.com/ 在Oracle中使用 null,''(空字符串),'_'(空格)时,有没有遇到问题?产生疑惑? null和’’(空字符串)是一个意思 注: 为了便于 ...

  9. Python3执行DOS命令并截取其输出到一个列表字符串,同时写入一个文件

    #执行DOS命令并截取其输出到一个列表字符串,同时写入一个文件#这个功能很有用listing=os.popen('ipconfig').readlines()for i in listing: pri ...

随机推荐

  1. BIO NIO AIO之间的区别

    一.BIO.NIO.AIO的基本定义与类比描述: BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成.这里使用那个经典的烧开水例子,这里假设一个烧开 ...

  2. 关于导入高德地图 java.lang.UnsatisfiedLinkError: Couldn't load XXXfrom loader dalvik.system.PathClassLoader[DexPathLis

    然后后面就是找不到高德地图提供的地图so 就是上面几个 然后不要忘了在buildGradle文件里添加这么一句话 sourceSets { main { jniLibs.srcDirs = ['lib ...

  3. Spring Boot 针对 Java 开发人员的安装指南

    Spring Boot 可以使用经典的开发工具或者使用安装的命令行工具.不管使用何种方式,你都需要确定你的 Java 版本为 Java SDK v1.8 或者更高的版本.在你开始安装之前,你需要确定你 ...

  4. Spring Boot: remove jsessionid from url

    参考代码 :Spring Boot: remove jsessionid from url 我的SpringBoot用2.0.*,答案中的第一二个方案亲测无效. 应该在继承了Configuration ...

  5. Guarding Bananas

    Guarding Bananas Once there was a lazy monkey in a forest. But he loved banana too much. One day the ...

  6. hdu-1176免费馅饼

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. JAVA 两个对象不同为什么他们的hashcode有可能相同

    hashCode是所有java对象的固有方法,如果不重载的话,返回的实际上是该对象在jvm的堆上的内存地址,而不同对象的内存地址肯定不同,所以这个hashCode也就肯定不同了.如果重载了的话,由于采 ...

  8. [LeetCode] 94. Binary Tree Inorder Traversal(二叉树的中序遍历) ☆☆☆

    二叉树遍历(前序.中序.后序.层次.深度优先.广度优先遍历) 描述 解析 递归方案 很简单,先左孩子,输出根,再右孩子. 非递归方案 因为访问左孩子后要访问右孩子,所以需要栈这样的数据结构. 1.指针 ...

  9. 关于TCP长连接和发送心跳的一些理解

    原因 TCP是一种有连接的协议,但是这个连接并不是指有一条实际的电路,而是一种虚拟的电路.TCP的建立连接和断开连接都是通过发送数据实现的,也就是我们常说的三次握手.四次挥手.TCP两端保存了一种数据 ...

  10. vue 给 图片添加一个默认图片

    <img v-bind:src="userData.photo" :onerror="logo" class="img-box4"&g ...