场景:用户需要从memo字段中获取,实时扣款:后的扣款金额,并把同一案件的求和
1.先判断字段中是否含有实时扣款 instr(memo,‘实时扣款’)>0
2.截取实时扣款以及后面一小串 case when instr(memo,‘实时扣款’)>0 then substr(memo,instr(memo,‘实时扣款’),15) when instr(memo,‘划扣’)>0 then substr(memo,instr(memo,‘划扣’),15) else ‘0’ end as memo
3.正则校验获取数字 尝试了 regexp_substr(memo,’-|+?\d+(.\d+)?’)
regexp_replace(memo,’[^0-9|!.]’,’’)
4.自定义函数,防止报错isNumber
create or replace function isNumber(p in varchar2)
return number
is
test number;
begin
test := to_number§;
return test;
exception
when VALUE_ERROR then return 0;
end;
4.正则直接获取
select regexp_substr(
regexp_substr(‘20190724实时回款-信用卡行使抵消权 :0.01,尚欠57152.22’,’(行使抵消权|实时扣款) ?:\d+(.\d+)?’),’\d+(.\d+)?’) from dual
一、wm_concat()函数是oracle中独有的,mysql中有一个group_concat()函数。
这两个函数的作用是相同的,它们的功能是:实现行转列功能,即将查询出的某一列值使用逗号进行隔开拼接,成为一条数据。