解析計算公式,然後生成自己想要的格式
想要實現的效果
package ys.util.jsgs;
update YS_NDYSMX T
SET F_DNYS =
(SELECT T1.F_DNYS * T2.F_DNYS
FROM (SELECT *
FROM YS_NDYSMX
WHERE F_YSQJ = '2016'
AND F_YSLXBH = 'Y09'
AND F_XMBH = 'A07002002001') T1,
(SELECT *
FROM YS_NDYSMX
WHERE F_YSQJ = '2016'
AND F_YSLXBH = 'Y09'
AND F_XMBH = 'A07002002002') T2
WHERE T.F_DWBH = T1.F_DWBH
AND T.F_DWBH = T2.F_DWBH)
WHERE T.F_YSQJ = '2016'
AND T.F_YSLXBH = 'Y09'
AND T.F_XMBH = 'A07002002'
package ys.util.jsgs; public class Test { public static void main(String[] args) { //String str = "[email protected]"; String str = "(A09003-A08-A07)/[email protected]"; int index = 0 ; //String[] ystype = new String []{"F_NDYS","F_SNWC"} ; String ystype = "F_SNWC"; str = str.trim().replaceAll(" ", ""); System.out.println(":"+str); String[] nameArray = str.split("\\*|\\+|\\-|\\/"); String [] bh = new String[nameArray.length]; char [] fh = new char[nameArray.length-1]; for(int i = 0 ; i <nameArray.length;i++){ if(index == 0 ){ index = index + nameArray[i].length(); }else{ index = index + nameArray[i].length()+1; } bh[i] = nameArray[i]; } index = 0; for(int i = 0 ; i <nameArray.length-1;i++){ if(index == 0 ){ index = index + nameArray[i].length(); }else{ index = index + nameArray[i].length()+1; } fh[i] = str.charAt(index); } String strr = ""; for(int i = 0 ;i < bh.length;i++){ if(i == bh.length-1){ if(bh[i].indexOf(")")!=-1){ if(bh[i].startsWith("A")){ strr = strr + "NVL(T"+(i+1)+"."+ystype+",0) )"; }else{ strr = strr + bh[i]; } }else{ //判斷是不是出發 if(strr!="" &&strr.substring(strr.length()-1).equals("/")){ if(bh[i].startsWith("A")){ strr = strr + "NVL(T"+(i+1)+"."+ystype+",0) )"; }else{ strr = strr + bh[i] +")"; } }else{ if(bh[i].startsWith("A")){ strr = strr + "NVL(T"+(i+1)+"."+ystype+" , 0) "; }else{ strr = strr + bh[i] ; } } } }else{ if(bh[i].indexOf("(")!=-1){ if(bh[i].replace("(", "").startsWith("A")){ strr = strr +"(" + "NVL(T"+(i+1)+"."+ystype+",0) " + fh[i] ; }else{ strr = strr + bh[i] + fh[i] ; } }else if(bh[i].indexOf(")")>0){ if(bh[i].startsWith("A")){ strr = strr + "NVL(T"+(i+1)+"."+ystype+",0) )" + fh[i] ; }else{ strr = strr + bh[i] + fh[i] ; } }else{ if(strr!="" &&strr.substring(strr.length()-1).equals("/")){ if(bh[i].startsWith("A")){ strr = strr + "NVL(T"+(i+1)+"."+ystype+",0) )"+ fh[i]; }else{ strr = strr + bh[i]+")"+ fh[i]; } }else if(fh[i]=='/'){ if(bh[i].startsWith("A")){ if(bh[i+1].startsWith("A")){ strr = strr + " decode( NVL (T"+(i+2)+"."+ystype+" ,0),0,0, NVL (T"+(i+1)+"."+ystype+" ,0) " + fh[i] ; }else{ strr = strr + " decode("+bh[i+1]+" ,0,0, NVL(T"+(i+1)+"."+ystype+" ,0)" + fh[i] ; } }else{ if(bh[i+1].startsWith("A")){ strr = strr + " decode(NVL(T"+(i+2)+"."+ystype+" ,0),0,0, "+bh[i]+ fh[i] ; }else{ strr = strr + " decode("+bh[i+1]+" ,0,0, "+bh[i] + fh[i] ; } } }else{ if(bh[i].startsWith("A")){ strr = strr + "NVL(T"+(i+1)+"."+ystype+" ,0)" + fh[i] ; }else{ strr = strr + bh[i] + fh[i] ; } } } } } String sql = ""; String where = ""; String yslx = ""; String xmbh = ""; String year= "2016"; for(int i = 0 ;i < bh.length;i++){ if(bh[i].replace("(","").replace(")", "").indexOf("@")!=-1){ xmbh = bh[i].replace("(","").replace(")", "").split("@")[0]; yslx = bh[i].replace("(","").replace(")", "").split("@")[1]; }else if(bh[i].indexOf("decode")!=-1){ xmbh = bh[i].split(",")[bh[i].split(",").length-1]; }else{ xmbh = bh[i].replace("(","").replace(")", ""); } if(i==bh.length-1){ if(sql == "" ||sql ==null){ if(bh[i].startsWith("A")){ sql = sql +"( SELECT * FROM YS_NDYSMX WHERE F_YSQJ = '"+year+"' AND F_YSLXBH = '"+yslx+"' AND F_XMBH = '"+xmbh+"' ) " +"T"+(i+1); if("Y08".equals(yslx)){ where = where + " T.F_DWBH = "+"T"+(i+1)+".F_DWBH AND T"+(i+1)+".F_JH = T"+(i+1)+".F_DWBH"; }else{ where = where + " T.F_DWBH = "+"T"+(i+1)+".F_DWBH"; } }else{} }else if(",".equals(sql.substring(sql.length()-1, sql.length()))){ if(bh[i].startsWith("A")){ sql = sql +"( SELECT * FROM YS_NDYSMX WHERE F_YSQJ = '"+year+"' AND F_YSLXBH = '"+yslx+"' AND F_XMBH = '"+xmbh+"' ) " +"T"+(i+1); if("Y08".equals(yslx)){ where = where + " T.F_DWBH = "+"T"+(i+1)+".F_DWBH AND T"+(i+1)+".F_JH = T"+(i+1)+".F_DWBH"; }else{ where = where + " T.F_DWBH = "+"T"+(i+1)+".F_DWBH"; } }else{ sql = sql.substring(0, sql.length()-1); where = where.substring(0, where.length()-3); } } }else{ if(bh[i].replace("(", "").startsWith("A")){ sql = sql +"( SELECT * FROM YS_NDYSMX WHERE F_YSQJ = '"+year+"' AND F_YSLXBH = '"+yslx+"' AND F_XMBH = '"+xmbh+"' ) " +"T"+(i+1) +","; where = where + " T.F_DWBH = "+"T"+(i+1)+".F_DWBH AND" ; } } } System.out.println(strr); System.out.println(sql); System.out.println(where); } }
暫時不能解析 連除 即使 (A01/A02/A03)
相關推薦
解析計算公式,然後生成自己想要的格式
想要實現的效果 package ys.util.jsgs; update YS_NDYSMX T SET F_DNYS = (SELECT T1.F_DNYS * T2.F_DNYS FROM (SELECT
mybatis-generator-修改原始碼生成自己想要的程式碼
前言 雖然mybatis-generator能生成dao,mapper,xml等檔案,但是生成的程式碼也不是完全通用,所以這裡我們要的mybatis-generator-core原始碼進行修改。 場景 1.生成自己想要的註釋 /** * 使用者資訊
安卓呼叫百度地圖定位自己的位置,然後分享自己的位置資訊生成連結短串。
</pre><pre name="code" class="java"> 前些天公司讓做一個這樣的功能描述如下 呼叫百度地圖的定位功能,然後通過簡訊將自己的位置
作為程序員的一些感悟,都活成自己想要的樣子了嗎?
程序員 程序人生 閱讀 編程語言 編程工作之余偶爾能夠靜下心來寫一些感悟。如若本文能夠給你當頭一棒,讓你有醍醐灌頂之感,那表明我的文筆還沒有落下太多。覺得寫的好的,也可以點贊關註、轉發一下。01作家李尚龍說:“在大城市裏,搞廢一個人的方式特別簡單。給你一個安靜狹小的空間,給你一根網線,最好再加
看一本python書,猜數字遊戲是入門,然後就自己寫了下
水平不高,就想寫一寫,功能實現了,但不完善,如果亂輸入就會出現問題,後續再把程式碼完善下,今天沒時間了,貼上程式碼,共同學習。相容版本3和2均可以直接拿程式碼測試。 #coding:utf-8 # 這是一個猜數字遊戲 import random import sys class Guess
獲取URL中的引數(使用迴圈獲取,存進集合中,以url中的引數作為key,可根據需要根據key調取自己想要的引數)
這是index頁面 中的點選事件方法 準備跳轉到model_xxxx-list.html的頁面,傳的id function mod
如何使用Chrome瀏覽器,打包生成自己的外掛(crx格式檔案)? 真男人敢於嘗試新鮮事兒:使用外掛,美化Chrome醜陋的標籤頁,提升福利,程式碼等搜尋效率,無障礙訪問谷歌
chrome extension,副檔名為crx,俗稱chrome擴充套件,chrome外掛。 crx檔案本質就是ZIP檔案,只是谷歌在ZIP檔案頭,插入了自定義的私有欄位,如,外掛描述,外掛ID,金鑰等。 使用者可以手動修改crx檔案的副檔名,修改為zip,然後使用普通的解壓工具,就能解壓。
SQL表中儲存計算公式,直接執行
這個題目有點繞口啊,其實這個需求也是在論壇裡發現的,覺得挺有意思,記錄一下。論壇帖子地址:https://bbs.csdn.net/topics/392480285 就是一個表中幾個欄位,
rem 的計算公式,小程式的單位換算
監聽螢幕在大小改變 ,recalc 是計算方法window.addEventListener(resizeEvt,recalc,false);計算原理是rem 就是幫我們把設計圖實現一個等比縮放的過程,假如設計圖是按 640px 來設計的,那麼我把設計圖分成 10份(隨你自
pt1000計算公式,pt1000分度表
PT1000是鉑熱電阻,它的阻值會隨著溫度的變化而改變。PT後的1000即表示它在0℃時阻值為1000歐姆,在300℃時它的阻值約為2120.515歐姆。它的工作原理:當PT1000在0攝氏度的時候,它的阻值為1000歐姆,其阻值隨溫度呈線性變化。 PT1000熱電阻值計算: R(t
怎麼解析Json資料,然後把解析到的Json資料填充到佈局中?
一.首先把需要解析的Json資料如下所示: { "res_code": 0, "res_error": "", "res_body": { "Counts": 11596, "PageCount": 580,
如何使用Chrome瀏覽器,打包生成自己的外掛(crx格式檔案)?
chrome extension,副檔名為crx,俗稱chrome擴充套件,chrome外掛。crx檔案本質就是ZIP檔案,只是谷歌在ZIP檔案頭,插入了自定義的私有欄位,如,外掛描述,外掛ID,金鑰等。使用者可以手動修改crx檔案的副檔名,修改為zip,然後使用普通的解壓工
用explain來解析sql語句,然後建立正確的索引
用explain mysql中來解析sql語句是一個非常好用的工具,它可以檢視你的sql語句的執行是直接全部掃描,還是經過索引優化的。用它來分析sql語句也可以避免一些無用的索引。下面來看一個例子: 用sql來查詢表中是否有匹配的a或者b(一共180w條記錄)第一版: 一條
匯出一個數據庫下所有的表的資料結構,然後生成一個包含多個表sheet的excel文件
檢視一個表的資料結構:SELECT IFNULL(COLUMN_NAME,'') AS columnmName, IFNULL(COLUMN_TYPE,'') AS columnType, IFNULL(DATA_TYPE ,'')AS dataType,
用CSS3/JS繪制自己想要的按鈕
width 我認 ive html標簽 ima 選擇 20px word event 我認為按鈕的繪制分以下三個步驟 第一步,繪制按鈕的輪廓 選擇合適的html標簽,設置輪廓的CSS /* html代碼 */ <a href="#" class="butto
把select的小圖標替換成 自己想要的圖片
sele 技術 mage 選項 one 嘗試 下拉 .com 9.png 不同的瀏覽器默認的select的選項圖標是不同的,例如: 在chrome中,是這樣的: 未點擊時 點擊時 在Firefox中是這樣的: 未點擊時 點擊時 在IE9中是這樣的: 未點擊時
JS的時間差換算(String to 自己想要的時間格式)
換算 想要 result == parse 字符 獲取時間戳 parseint 字符串 JS的時間差換算(String to 標準的時間格式) 1.字符串到標準時間格式: 字符串: var time1="2018-05-11 00:00:00" var time2
追尋自己想要的模樣
導致 這也 反思 不理解 但我 負責 感覺 獻給自己 悲傷 《追尋自己想要的模樣》 今天參加一個交流會,最喜歡一句話:感恩自己最好的方式就是活出自己心中最想要的模樣![飛吻][飛吻][飛吻]。 是的,好像
PHP (Yii2) 自定義業務異常類(可支援返回任意自己想要的型別資料)
public function beforeAction($action) { return parent::beforeAction($action); } public function runAction($id, $params = []) {
easyui預設圖示的使用和如何新增自己想要的圖示
1.預設圖示 .icon-blank{ background:url('icons/blank.gif') no-repeat center center; } .icon-add{ background:url('icons/edit_add.png') no-rep