實現四則運算的一條sql語句
http://www.itpub.net/thread-1051167-1-1.html
實現四則運算的一條sql語句
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)) --加減部分 計算之和
+
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
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
以前如果算式只有加減沒有乘除,結果為null,是以前考慮不周, 現在對乘除部分計算之和加上nvl判斷
[@more@]
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)) --加減部分 計算之和
+
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
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
以前如果算式只有加減沒有乘除,結果為null,是以前考慮不周, 現在對乘除部分計算之和加上nvl判斷
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/92289/viewspace-1015226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 複數的四則運算(C語言實現)C語言
- XJSON 是如何實現四則運算的?JSON
- 用python實現四則運算的生成與判定Python
- [20181114]一條sql語句的優化.txtSQL優化
- 一條sql語句的執行過程SQL
- 四則運算
- Sql語句實現不同記錄同一屬性列的差值計算SQL
- 一條update SQL語句是如何執行的SQL
- 一條SQL更新語句是如何執行的SQL
- 一條SQL更新語句是如何執行的?SQL
- php鏈式操作實現四則鏈式運算PHP
- 一條更新的SQL語句是如何執行的?SQL
- Java 數學運算與條件語句全解析Java
- PL/SQL 條件控制語句SQL
- 一條SQL語句在MySQL中如何執行的MySql
- 一條 SQL 查詢語句是如何執行的?SQL
- 四則運算計算器
- 四則運算專案
- 四則運算手冊
- 一條sql語句在mysql中是如何執行的MySql
- 一條 SQL 語句在 MySQL 中是如何執行的?MySql
- 位運算與SQL實現SQL
- 「譯」寫好JavaScript條件語句的5條守則JavaScript
- 正則實現數學運算
- 實現一個自動生成小學四則運算題目的命令列程式命令列
- MyBatis標籤實現的動態SQL語句MyBatisSQL
- MySQL日誌(一條sql更新語句是如何執行的)MySql
- Java簡單四則運算Java
- OJ1038 四則運算
- SQL語句優化的原則與方法QOSQL優化
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- 記一個實用的sql查詢語句SQL
- 執行一條sql語句都經歷了什麼?SQL
- 執行一條 SQL 語句,期間發生了什麼?SQL
- Oracle執行語句跟蹤 使用sql trace實現語句追蹤OracleSQL
- 四則運算+-×÷同時成立的四連環(2)
- 四則運算+-×÷同時成立的四連環(4)
- 四則運算+-×÷同時成立的四連環(3)
- 四則運算+-×÷同時成立的四連環(1)