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

实现四则运算的一条sql语句
http://www.itpub.net/thread-1051167-1-1.html
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))
          +
          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 )) 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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9066649/viewspace-442052/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9066649/viewspace-442052/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值