1. 程式人生 > >解析計算公式,然後生成自己想要的格式

解析計算公式,然後生成自己想要的格式

想要實現的效果

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