ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 实现四则运算的一条sql语句

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

原创 Linux操作系统 作者:grubbyoo 时间:2008-09-05 16:37:26 0 删除 编辑
实现四则运算的一条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博客 ” ,链接:https://blog.itpub.net/9066649/viewspace-442052/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 我写过的sql记录2
下一篇: 连续号码段
请登录后发表评论 登录
全部评论

注册时间:2008-08-29

  • 博文量
    11
  • 访问量
    23093