Oracle之 取字符串中最前面的数字部分转数字格式
今天在工作中遇到这样一个问题:我要将一个字段进行排序,这个字段是这样的形式↓
数字+空格+名称+空格+第N批
脑瓜崩想了一下,好像没有类似于JAVA中的split的功能的函数呀,左挠头右挠头,终于想到了解决方案。
大致思路就是:得到第一个空格的位置,然后,对这个字符串使用SUBSTR进行截取,最后再使用to_number函数进行转换就行;好,想到就是干
首先,我们使用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既然索引位置找到了,那么我们就可以光明正大的进行字符截取了SUBSTR(t.VC_FUKPCJBH,0,instr(t.VC_FUKPCJBH,’ ‘))(截取的这个没什么好说的,大家自己看一下就行)
最后使用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;
效果图如下:
最后,我想说:在解决问题的过程中,如果我们直接奔着如何一步能解决问题行不通的话,应该及时止损(时间损失),想办法加一层在处理,上面的处理方式其实很简单,多想想就能想到。
还没有评论,来说两句吧...