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
總結
以上是生活随笔為你收集整理的sql的加减乘除运算_实现四则运算的一条sql语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自动刷新_AutoRefresh插件:开
- 下一篇: python3 安装pyinstalle