oracle中如果有百分号则提取百分号前面的数字,如果没有则不提取
name
fskf22
ds1.5%1.5
dsds
sdasdas22%dasdasd22

这种数据我想提取的是有百分号的就提取百分号前面的数字没有百分号的就不提取

lincoder 发布于 2020-9-4 11:07
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
1
ColdmanLv6高级互助
发布于2020-9-4 11:08(编辑于 2020-9-4 11:26)

https://help.finereport.com/doc-view-2363.html

看看这个提取字符串中的数字

select regexp_replace(substr('dafdsf548%sdf',1,instr('dafdsf548%sdf','%')),'[^0-9]','') from dual;

instr()判断百分号的位置,

substr()截取首位至百分号位置的字符串

regexp_replace()对截取的字符串获取数字

  • lincoder lincoder(提问者) oracle中用sql
    2020-09-04 11:15 
  • Coldman Coldman 回复 lincoder(提问者) 会不会存在百分号后面有数字的情况,例如sdf15%sdf33,会不会存在百分号前面的数字不连续的情况,例如wer23ds44%sdf
    2020-09-04 11:20 
  • lincoder lincoder(提问者) 回复 Coldman 不会存在这种情况
    2020-09-04 11:21 
  • Coldman Coldman 回复 lincoder(提问者) 看新编辑的回答
    2020-09-04 11:25 
最佳回答
0
jongwangLv6中级互助
发布于2020-9-4 11:23(编辑于 2020-9-4 11:38)

正则以%结尾

SELECT REGEXP_SUBSTR (字段, '[0-9]+(\.[0-9]){0,1}%') as test_name FROM 表;


  • jaEetxZ9 jaEetxZ9 此方法只能提取带有小数点的百分比数字,不带小数点的不能提取:完整的为: SELECT REGEXP_SUBSTR (字段, \'[0-9]+(\\.[0-9]){0,1}%|[0-9]+{0,1}%\') as test_name FROM 表;
    2021-12-23 11:04 
  • 3关注人数
  • 891浏览人数
  • 最后回答于:2020-9-4 11:38
    请选择关闭问题的原因
    确定 取消
    返回顶部