oracel字符截取substr

oracle中提供一个内置函数substr处理字符截取问题:

substr语法如下:

substr( string, start_position, [ length ] )

  string :待截取的元字符

  start_position : 截取开始的下标位置

  length : 截取长度,此参数可缺省,缺省的情况下默认从下标开始开始位置截取至元字符最后一位

select substr('abcdefg',0) from dual --返回截取后的子字符 accdefg
select substr('abcdefg',1) from dual -- 返回截取后的子字符acbcdefg

select substr('abcdefg',2,2) from dual -- 返回截取后的子字符bc

select substr('abcdefg',-3,3) from dual --返回截取后的子字符 efg


请注意第一条sql跟第二条sql返回的子字符,对比下标位置会发现,从0开始截取跟从1开始截取的返回结果是一样的.. 此前查阅网上资料很多理解为oracel中对字符的下标也是从0开始计算的,如若是此,那0跟1应该返回不同的子字符,由于涉猎不深,暂且个人理解如下:

oracle中对字符的下标计算是从1开始的,此处的0可理解为截取方向的分界点但等同于1,观察最后一条sql我们可知,position为正数时,截取方向是从左开始计算下标的,

position为负数时,下标计算从右开始,但截取方向一定是从左到右。

ps:注意position 0  1及负数情况。


substr 与java substring的区别:

java string对象的常用方法中同样也提供了对字符串截取的方法, substring(startindex,targetindex);

二者区别在于:

1.java下标从0开始计算,与oracel position参数表方向不同含义。

2.endIndex <= string.length  但oracel的length参数>0即可,超出字符长度部分直接返回null

3.参数决定不同 substring中字符截取参数含义:

 substring(int beginIndex,int endIndex)  beginIndex开始下标位置  endIndex结束的下标位置(endIndex <=  str.length)  java字符截取中有含头不含尾的说法,即截取返回的子字符是从beginIndex开始到下标为endIndex-1的字符,new String("abcdefg").substring(0,1),截取字符abcdefg,开始下标为0 结束下标我1,结果返回a(含头不含尾),间接的可以理解为等同于oracel中substr的length参数,即截取字符的长度。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值