oracle sql语句加减,实现四则运算的一条sql语句

实现四则运算的一条sql语句

1.建立一个测试表

create table mar_test( id number, text varchar2(200))

insert into mar_Test values ( 1,'12+556-543*152/2423+23*2*435+34-234');

insert into mar_Test values ( 2,'12/2/3/4');

insert into mar_Test values ( 3,'1*2*34');

insert into mar_Test values ( 4,'1+5-5*2/5+3*2*4*5+34-2');

select a.id,max(text) text,

sum(regexp_substr(add_text,'[0-9]+',1,n)*decode(regexp_substr('+'||add_text,'[^0-9]',1,n),'+',1,-1)) --加减部分 计算之和

+

nvl(sum( (select decode(substr(regexp_substr('+'||text,'[+|-]([0-9]+[*|/]+)+[0-9]+',1,n),1,1),'+',1,-1)

*power(10,Sum(Log(10, decode( regexp_substr('*'||regexp_substr(text,'([0-9]+[*|/]+)+[0-9]+',1,n),'[^0-9]',1,rownum),

'*', regexp_substr(regexp_substr(text,'([0-9]+[*|/]+)+[0-9]+',1,n),'[0-9]+',1,rownum) ,

1/regexp_substr(regexp_substr(text,'([0-9]+[*|/]+)+[0-9]+',1,n),'[0-9]+',1,rownum)

) ) ) )

from dual

connect by rownum <=len )) ,0) wanted --乘除部分 计算之和

from

(select a.id,a.text,

length(regexp_replace(text,'[0-9]+'))+1 len,

regexp_replace(text,'([0-9]+[*|/]+)+[0-9]+',0) add_text

from mar_test a ) a,

(select rownum n from dual connect by rownum<100) b

where a.len>=b.n

group by id

sql 实现对 text中算式的计算 ,限制就是不能加括号

运算结果

ID TEXT WANTED

1 12+556-543*152/2423+23*2*435+34-234 20343.93644

2 12/2/3/4 0.5

4 1+5-5*2/5+3*2*4*5+34-2 156

3 1*2*34 68

以前如果算式只有加减没有乘除,结果为null,是以前考虑不周, 现在对乘除部分计算之和加上nvl判断[@more@]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值