1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > sql的加减乘除运算_实现四则运算的一条sql语句

sql的加减乘除运算_实现四则运算的一条sql语句

时间:2019-07-11 16:54:09

相关推荐

sql的加减乘除运算_实现四则运算的一条sql语句

感谢各位版主和坛友的鼓励,格式了一下代码

算法就是

将 '12+556-543*152/2423+23*2*435+34-234'

变成2部分'12+556- 0+ 0+34-234'

和-543*152/2423 ;23*2*435

分别计算求和

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)) +--加法的数字求和,乘法和除法分开计算 ,取每个子串前的运算符号,如果为 ‘-’就 乘以-1

sum((select decode(substr(regexp_substr('+' || text,

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

1,

n),

1,

1),

'+',

1,

-1) * -- 如 25*515/544子串前的运算符号,如果为 ‘-’就 乘以-1

power(10, -- 从itpub上学到的 利用lg将 连乘 改为加法

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 --将算式中 乘的子式 代替成0, 后面分开计算

from mar_test a) a,

(select rownum n from dual connect by rownum < 100) b--默认算式最多数字100个

where a.len >= b.n

group by id

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。