oracle截取字符串区间段的一部分字符串

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)+1, ((instr(i1.fdisplayname, ‘业‘,1,2)+1) - (instr(i1.fdisplayname, ‘事‘,1,1)+1)))
as subname from SHENZHENJM1222.B i1

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

时间: 2024-10-13 08:19:45

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

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

oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 常用函数:substr和instr1.SUBSTR(string,start_position,[length])    求子字符串,返回字符串解释:string 元字符串       start_position   开始位置(从0开始)       length 可选项,子字符串的个数For example:substr("ABCDEFG", 0); /

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

使用Oracle中Instr()和substr()函数: 在Oracle中可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符. 其语法为: instr(sourceString,destString,start,appearPosition). instr('源字符串' , '目标字符串' ,'开始位置','第几次出现') 其中sourceString代表源字符串: destString代表想聪源字符串中查找的子串: start代表查找的开始位置,该参数可选的,默认为1: ap

Oracle截取字符串和查找字符串,联合使用截取特定字符

oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 常用函数:substr和instr1.SUBSTR(string,start_position,[length])    求子字符串,返回字符串解释:string 元字符串       start_position   开始位置(从0开始)       length 可选项,子字符串的个数For example:substr("ABCDEFG", 0); /

SQLSERVER中WITH AS递归来实现ORACLE的INSTR函数以及固定分隔符字符串截取

分享个sqlserver的sql给大家,能用with as的递归实现oracle中的instr函数,并且能将分隔符的字符串解析,例如: 字符串为:'O3O,30,4834,348934,AA,09WOFJOWE,FW' 解析完成: 1)实现oracle的instr函数,sql如下: WITH CTE1 AS ( SELECT '1' AS ID , 'O3O,30,4834,348934,AA,09WOFJOWE,FW' AS STR ), CTE2 AS ( SELECT 1 AS LEVEL

Oracle截取字符串的函数substr

Oracle截取字符串的函数substr substr Oracle中的截取字符串函数. 语法如下: substr( string, start_position, [ length ] ) 参数分析: string 字符串值 start_position 截取字符串的初始位置, Number型,start_position为负数时,表示从字符串右边数起. length 截取位数,Number型 其中,length为可选,如果length为空(即不填)则返回start_position后面的所有

oracle截取字符串(截取某个字符前面的字符串)

已验证. 要求:A.数据库表中的一个字符串 可能含有"+" 例:ORC+001 也可能不含“+” B.要求如果该字符串含有“+”,则取“+”之前的字符 例:ORC+001 取ORC C.如果该字符串不含"+",则直接取该字符串. 解答:利用ORACLE中 INSTR,SUBSTR以及CASE WHEN语法即可实现. Oracle中函数 INSTR:INSTR方法的格式为 INSTR(源字符串, 目标字符串, 起始位置, 匹配序号) 默认查找顺序为从左到右.当起始位置

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

本文并不准备介绍全部的oracle函数,当前情势下,俺也还没这个时间,需要学习的东西太多了,要把多数时间花在学习经常能用上的技术方面:),所以如果是准备深入了解所有oracle函数的朋友,还是去关注:Oracle SQL Reference官方文档更靠谱一些. 本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思的一些函数.分二类介绍,分别是: 著名函数篇 -经常用到的函数 非著名函数篇-即虽然很少用到,但某些情况下却很实用 注:N表示数字型,C表示字符型,D表示日期型,

1字符串中的world替换为i bookan wisdom2.字符串的相加字符串输出,长度3比较字符串大小4截取字符串5字符串内所有a都替换成A6判断字符串是否以http开头7将字符串内admin和123截取出来8字符添加

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* 第1题 字符串中的world替换为i bookan wisdom */ //        NSString *[email protected]"hello world and sunshine"; //        NSString *newstr3=[str1 string

SQL Server中判断字符串出现的位置及字符串截取

首先建一张测试表: create table teststring(name nvarchar(100));insert into teststringvalues('张三,李四,王五,马六,萧十一,皇宫'); 1.判断字符串中某字符(字符串)出现的次数,第一次出现的位置最后一次出现的位置: 查看','出现的次数 select LEN(name)-LEN(REPLACE(name,',','')) from teststring; 查看','第一次出现的位置: select CHARINDEX(