oracle截取分割字符串,2、Oracle PL/SQL字符串分割截取

本文介绍了如何在Oracle中使用instr和substr函数实现字符串的截取和分割,类似于MySQL的substring_index和C#的Split功能。通过案例展示了这两个函数的用法,以及如何利用它们创建自定义的getStr和getClobStr函数。
摘要由CSDN通过智能技术生成

Oracle中的instr和substr函数

Oracle PL/sql中可以通过instr(获取特定字符串的索引)和substr(截取字符串)函数的组合使用进行字符串的截取实现类似于MysqL中substring_index函数或C#语言的Split函数。首先来认识下Oracle中的instr和substr函数。

1、instr函数

instr( string1,string2 [,start_position [,nth_appearance ] ] )

string1 源字符串

string2 目标字符串.

start_position 从string1 的哪个位置开始查找。默认为1.字符串索引从1开始。为正,从左到右开始检索,为负,从右到左检索。

nth_appearance 代表要查找第几次出现的string2.此参数可选,默认为 1.不能为负数

返回要查找的字符串string2在源字符串string1中的符合条件的开始索引

示例:

selectinstr('www.baidu.com','.',-1,2) from dual

.在str中存在,-1说明检索是从最后一位开始,2说明出现2次,返回的结果是4

2、substr函数

substr(string,start_position,length)

string 源字符串,即被截取的字符串.

start_position 字符截取的开始位置.start_position大于0时,从左边算起,小于0时,从右边查起

length 截取字符的个数.默认截取到最后一位.

示例:

selectsubstr('www.baidu.com',1,4) from dual

执行结果都是'www.'

使用instr和substr函数实现MysqL中的substring_index函数

首先看第一个例子:

select substring_index('www.baidu.com',2);

Oracle中可以:

select substr('www.baidu.com',instr('www.baidu.com',2)-1) from dual

instr函数再-1是因为MysqLsubstring_index返回结果不包括.,上面返回的结果都是'www.baidu'。

看第二个例子:

select substring_index('www.baidu.com',-2);

Oracle可以:

select substr('www.baidu.com',2) + 1,length('www.baidu.com'))from dual

select substr('www.baidu.com',2) + 1) from dual

使用instr和substr函数实现C#中的Split函数

实现字符串按某字符截取的思路包括:instr获取该字符的索引;substr按索引截取字符串。获取字符串索引时要考虑字符串的头尾,并且要考虑字符串不存在分割字符的情况。实现的getstr函数如下,另外要考虑大字符串对象作为输入输出的情况,后面实现了getClobSt函数。

create or replace function getStr (

inString IN varchar2,

delimiter IN varchar2,

substrNum IN INTEGER)

return VARCHAR2

as

outStr varchar2(500);

begin

if instr(inString,delimiter,1) > 1then

case

when substrNum = 1

then outStr := substr(inString,instr(inString,1)-1);

when substrNum > 1 and instr(inString,substrNum) > 0

then outStr := substr(inString,substrNum-1)+1,substrNum)-instr(inString,substrNum-1)-1);

when substrNum > 1 and instr(inString,substrNum) = 0 andinstr(inString,substrNum-1) > 0

then outStr := substr(inString,length(inString)-instr(inString,substrNum-1));

when substrNum > 1 and instr(inString,substrNum-1) = 0

then outStr := '';

endcase;

else

outStr := inString;

end if;

return outStr;

end;

/

create or replace function getClobStr (

inString IN CLOB,

substrNum IN INTEGER)

return CLOB

as

outStr CLOB;

begin

if instr(inString,substrNum-1) = 0

then outStr := '';

endcase;

else

outStr := inString;

end if;

return outStr;

end;

/

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值