Oracle之 取字符串中最前面的数字部分转数字格式

今天在工作中遇到这样一个问题:我要将一个字段进行排序,这个字段是这样的形式↓
在这里插入图片描述
数字+空格+名称+空格+第N批
脑瓜崩想了一下,好像没有类似于JAVA中的split的功能的函数呀,左挠头右挠头,终于想到了解决方案。

大致思路就是:得到第一个空格的位置,然后,对这个字符串使用SUBSTR进行截取,最后再使用to_number函数进行转换就行;好,想到就是干

  1. 首先,我们使用instr(t.VC_FUKPCJBH,’ ')
    此函数语法如下:
    instr(string1,string2, 【参数1】,【参数2】)
    参数分析:
    string1:(必填)源字符串,要在此字符串中查到;
    string2:(必填)子字符串,要在string1中查找的字符串;
    参数1 : (选填)开始查找的位置。如果省略默认为1,字符串索引从1开始。如果此参数为正,从左往右开始检索,如果为负,葱油往左检索,返回要查找的字符串在源字符串中的开始索引。
    参数2: (选填)查找string2在string1中第几次出现的位置,要查找第几次出现的string2.如果省略,默认为1,;如果为负数,系统报错。
    注意:如果string2在string1中没有找到,instr函数返回0;如果string1为null或者空,返回空;

SELECT instr('oracleinstr','a') FROM dual; -- 返回 3
SELECT instr('oracleinstr','ra') FROM dual; -- 返回 2
SELECT instr('oracleinstr','a',1,2) FROM dual; -- 返回 0
//(根据条件,由于a只出现一次,第四个参数2,就是说第2次出现a的位置,显然第2次是没有再出现了,
//所以结果返回0。注意空格也算一个字符!)  

//(就算是由右到左数,索引的位置还是要看‘ac'的左边第一个字母的位置,所以这里返回14) 
SELECT instr('oracleinstroracle','ac',-1,1) FROM dual; -- 返回 14 
  1. 既然索引位置找到了,那么我们就可以光明正大的进行字符截取了SUBSTR(t.VC_FUKPCJBH,0,instr(t.VC_FUKPCJBH,’ '))(截取的这个没什么好说的,大家自己看一下就行)
  2. 最后使用to_number进行转换即可;
select to_number(SUBSTR(t.VC_FUKPCJBH,0,instr(t.VC_FUKPCJBH,' '))),
t.VC_FUKPCJBH,t.* , t.rowid from ca_yingfxx t where t.vc_fukpcjbh is not null;

效果图如下:
在这里插入图片描述
最后,我想说:在解决问题的过程中,如果我们直接奔着如何一步能解决问题行不通的话,应该及时止损(时间损失),想办法加一层在处理,上面的处理方式其实很简单,多想想就能想到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值