转:Oracle中截取指定字符之间的字符串,获取特定字符串在字符串中出现的次数

一、Oracle中通过substr和instr实现截取指定字符之间的字符串

https://blog.csdn.net/chinasxdtzhaoxinguo/article/details/84663351

test表name字段 是字符串,型如 CA-CA1344-A-11OCT141250-D
需求一:按照-分隔,去第二段

select substr(name,instr(name,'-',1,1)+1,instr(name,'-',1,2)-1-instr(name,'-',1,1)) from test;

需求一:按照-分隔,去最后一段

select substr(name,instr(name,'-',-1)+1) from test;

二、获取特定字符串在字符串中出现的次数

https://blog.csdn.net/changerzhuo_319/article/details/86916413

select length(',abc,,,d,,ef,') - length(replace(',abc,,,d,,ef,', ',','')) from dual;
select length(name) - length(replace(name, '-','')) +1 as total from test;

三、case用法

https://www.cnblogs.com/wangrui1587165/p/9999961.html
https://blog.csdn.net/sdut406/article/details/81090510
语法 case when then else end

select
 name,
 CASE 
  when length(name) - length(replace(name, '-','')) +1 = 3
   THEN substr(name,instr(name,'-',1,1)+1,instr(name,'-',1,2)-1-instr(name,'-',1,1))
  ELSE
   NULL
 END AS source_schema,
 CASE length(name) - length(replace(name, '-','')) +1
  when 3
   THEN substr(name,instr(name,'-',1,1)+1,instr(name,'-',1,2)-1-instr(name,'-',1,1))
  ELSE
   NULL
 END AS source_schema_tmp,
 -- 分段总数
 length(name) - length(replace(name, '-','')) +1 as total,
 -- 取第一段
 substr(name,1,instr(name,'-',1,1)-1) as name1,
 -- 取第二段
 substr(name,instr(name,'-',1,1)+1,instr(name,'-',1,2)-1-instr(name,'-',1,1)) as name2,
 -- 取第三段
 substr(name,instr(name,'-',2,2)+1,instr(name,'-',2,3)-1-instr(name,'-',2,2)) as name3,
 -- 取最后一段
 substr(name,instr(name,'-',-1)+1) as name_1,
 -- 取倒数第二段
 substr(name, instr(name,'-',-2,2)+1, instr(name,'-',-1)-1-instr(name,'-',-2,2)) as name_2
from test;

四、MySQL与Oracle 差异比较之函数

https://www.cnblogs.com/HondaHsu/p/3641190.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值