楼主: grubbyoo

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

[复制链接]
论坛徽章:
0
41#
发表于 2008-10-6 10:08 | 只看该作者

回复 #1 grubbyoo 的帖子

LZ如果能解释下就更好了!

使用道具 举报

回复
论坛徽章:
3
生肖徽章2007版:马
日期:2009-01-04 10:20:34生肖徽章2007版:牛
日期:2009-11-04 16:54:262010数据库技术大会纪念徽章
日期:2010-05-13 09:34:23
42#
发表于 2008-10-6 10:44 | 只看该作者
强人 厉害!

使用道具 举报

回复
论坛徽章:
11
授权会员
日期:2007-07-08 18:54:592009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:蛇
日期:2008-10-24 16:46:51奥运会纪念徽章:现代五项
日期:2008-10-24 13:26:49生肖徽章2007版:羊
日期:2008-04-17 18:05:112008新春纪念徽章
日期:2008-02-13 12:43:03生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10
43#
发表于 2008-10-6 22:09 | 只看该作者

使用道具 举报

回复
论坛徽章:
0
44#
发表于 2008-10-7 09:07 | 只看该作者
真是有点复杂呀。。。强

使用道具 举报

回复
论坛徽章:
10
生肖徽章2007版:蛇
日期:2008-10-16 15:37:262011新春纪念徽章
日期:2011-02-18 11:43:35祖国60周年纪念徽章
日期:2009-10-09 08:28:00生肖徽章2007版:蛇
日期:2009-04-23 10:20:26生肖徽章2007版:鸡
日期:2009-03-10 21:16:44数据库板块每日发贴之星
日期:2009-01-08 01:01:022009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:蛇
日期:2008-10-27 16:26:10奥运会纪念徽章:举重
日期:2008-10-24 13:16:31一汽
日期:2013-10-28 20:43:00
45#
发表于 2008-10-7 11:39 | 只看该作者
有错误
我在里面添加一条记录
insert into mar_test values(5,'6+6');
再运行结果为NULL

使用道具 举报

回复
论坛徽章:
21
红旗
日期:2013-09-30 15:26:01凯迪拉克
日期:2013-10-23 12:48:26比亚迪
日期:2013-11-01 09:19:01奔驰
日期:2013-12-13 09:27:30马上有对象
日期:2014-11-18 10:46:242015年新春福章
日期:2015-04-28 15:24:55慢羊羊
日期:2015-05-28 09:49:31
46#
 楼主| 发表于 2008-10-7 11:54 | 只看该作者
的确有这个问题,我把 加减 和 乘除分开计算, 如果没有乘除,乘除部分就是null ,结果 就是null 了,
需要 用nvl判断null 变换为0,十分感谢gkl0818


   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

使用道具 举报

回复
论坛徽章:
1
奥运会纪念徽章:羽毛球
日期:2008-10-24 13:06:54
47#
发表于 2008-10-8 10:59 | 只看该作者

学习

我是来学习的。

使用道具 举报

回复
论坛徽章:
0
48#
发表于 2008-10-8 16:16 | 只看该作者
貌似不支持带括号的运算表达式

使用道具 举报

回复
论坛徽章:
4
茶鸡蛋
日期:2011-11-21 15:51:37ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:24灰彻蛋
日期:2013-06-24 13:26:37
49#
发表于 2008-10-9 22:20 | 只看该作者
很强大
慢慢看

使用道具 举报

回复
论坛徽章:
0
50#
发表于 2008-10-12 01:31 | 只看该作者
学习

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表