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

快来打我* 2022-11-09 14:09 515阅读 0赞

今天在工作中遇到这样一个问题:我要将一个字段进行排序,这个字段是这样的形式↓
在这里插入图片描述
数字+空格+名称+空格+第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

  2. 既然索引位置找到了,那么我们就可以光明正大的进行字符截取了SUBSTR(t.VC_FUKPCJBH,0,instr(t.VC_FUKPCJBH,’ ‘))(截取的这个没什么好说的,大家自己看一下就行)

  3. 最后使用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;

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

发表评论

表情:
评论列表 (有 0 条评论,515人围观)

还没有评论,来说两句吧...

相关阅读