1. 程式人生 > 其它 >mysql--select動態查詢資料 儲存過程 力控

mysql--select動態查詢資料 儲存過程 力控

  1 CREATE DEFINER=`skip-grants user`@`skip-grants host` PROCEDURE `dynamic_select1`(IN `表名稱` varchar(20),IN `開始時間` INT(16),IN `結束時間` INT(16),IN `時間間隔` INT(16),IN `流量計1` varchar(20),IN `前壓1` varchar(20),IN `後壓1` varchar(20),IN `溫度1` varchar(20),IN `流量計2` varchar(20),IN `前壓2` varchar(20),IN `後壓2` varchar(20),IN
`溫度2` varchar(20),IN `一級降壓A` varchar(20),IN `一級降壓B` varchar(20),IN `一級降壓C` varchar(20),IN `二級降壓A` varchar(20),IN `二級降壓B` varchar(20),IN `二級降壓C` varchar(20),IN `三級降壓A` varchar(20),IN `三級降壓B` varchar(20),IN `三級降壓C` varchar(20),IN `一級溫度A` varchar(20),IN `一級溫度B` varchar(20),IN `一級溫度C` varchar(20),IN `二級溫度A` varchar
(20),IN `二級溫度B` varchar(20),IN `二級溫度C` varchar(20),IN `三級溫度A` varchar(20),IN `三級溫度B` varchar(20),IN `三級溫度C` varchar(20)) 2 BEGIN 3 4 IF 流量計1='a' THEN 5 SET 流量計1=''; 6 ELSE 7 SET 流量計1=',流量1'; 8 END IF; 9 10 IF 前壓1='a' THEN 11 SET 前壓1=''; 12 ELSE 13 SET 前壓1=',前壓1'; 14 END IF; 15 16 IF
後壓1='a' THEN 17 SET 後壓1=''; 18 ELSE 19 SET 後壓1=',差壓1'; 20 END IF; 21 22 IF 溫度1='a' THEN 23 SET 溫度1=''; 24 ELSE 25 SET 溫度1=',溫度1'; 26 END IF; 27 28 IF 流量計2='a' THEN 29 SET 流量計2=''; 30 ELSE 31 SET 流量計2=',流量2'; 32 END IF; 33 34 IF 前壓2='a' THEN 35 SET 前壓2=''; 36 ELSE 37 SET 前壓2=',前壓2'; 38 END IF; 39 40 IF 後壓2='a' THEN 41 SET 後壓2=''; 42 ELSE 43 SET 後壓2=',差壓2'; 44 END IF; 45 46 IF 溫度2='a' THEN 47 SET 溫度2=''; 48 ELSE 49 SET 溫度2=',溫度2'; 50 END IF; 51 52 53 54 IF 一級降壓A='a' THEN 55 SET 一級降壓A=''; 56 ELSE 57 SET 一級降壓A=',一級壓力A'; 58 END IF; 59 60 IF 一級降壓B ='a' THEN 61 SET 一級降壓B=''; 62 ELSE 63 SET 一級降壓B=',一級壓力B'; 64 END IF; 65 66 IF 一級降壓C ='a' THEN 67 SET 一級降壓C=''; 68 ELSE 69 SET 一級降壓C=',一級壓力C'; 70 END IF; 71 72 IF 二級降壓A ='a' THEN 73 SET 二級降壓A=''; 74 ELSE 75 SET 二級降壓A=',二級壓力A'; 76 END IF; 77 78 IF 二級降壓B ='a' THEN 79 SET 二級降壓B=''; 80 ELSE 81 SET 二級降壓B=',二級壓力B'; 82 END IF; 83 84 IF 二級降壓C ='a' THEN 85 SET 二級降壓C=''; 86 ELSE 87 SET 二級降壓C=',二級壓力C'; 88 END IF; 89 90 IF 三級降壓A ='a' THEN 91 SET 三級降壓A=''; 92 ELSE 93 SET 三級降壓A=',三級壓力A'; 94 END IF; 95 96 IF 三級降壓B ='a' THEN 97 SET 三級降壓B=''; 98 ELSE 99 SET 三級降壓B=',三級壓力B'; 100 END IF; 101 102 IF 三級降壓C ='a' THEN 103 SET 三級降壓C=''; 104 ELSE 105 SET 三級降壓C=',三級壓力C'; 106 END IF; 107 108 IF 一級溫度A ='a' THEN 109 SET 一級溫度A=''; 110 ELSE 111 SET 一級溫度A=',一級溫度A'; 112 END IF; 113 114 IF 一級溫度B ='a' THEN 115 SET 一級溫度B=''; 116 ELSE 117 SET 一級溫度B=',一級溫度B'; 118 END IF; 119 120 IF 一級溫度C ='a' THEN 121 SET 一級溫度C=''; 122 ELSE 123 SET 一級溫度C=',一級溫度C'; 124 END IF; 125 126 IF 二級溫度A ='a' THEN 127 SET 二級溫度A=''; 128 ELSE 129 SET 二級溫度A=',二級溫度A'; 130 END IF; 131 132 IF 二級溫度B ='a' THEN 133 SET 二級溫度B=''; 134 ELSE 135 SET 二級溫度B=',二級溫度B'; 136 END IF; 137 138 IF 二級溫度C ='a' THEN 139 SET 二級溫度C=''; 140 ELSE 141 SET 二級溫度C=',二級溫度C'; 142 END IF; 143 144 IF 三級溫度A ='a' THEN 145 SET 三級溫度A=''; 146 ELSE 147 SET 三級溫度A=',三級溫度A'; 148 END IF; 149 150 IF 三級溫度B ='a' THEN 151 SET 三級溫度B=''; 152 ELSE 153 SET 三級溫度B=',三級溫度B'; 154 END IF; 155 156 IF 三級溫度C ='a' THEN 157 SET 三級溫度C=''; 158 ELSE 159 SET 三級溫度C=',三級溫度C'; 160 END IF; 161 162 163 SET @sqlstr = CONCAT('SELECT 時間2 ', 164 流量計1,前壓1,後壓1,溫度1,流量計2,前壓2,後壓2,溫度2, 165 一級降壓A,一級降壓B,一級降壓C, 166 二級降壓A,二級降壓B,二級降壓C, 167 三級降壓A,三級降壓B,三級降壓C, 168 一級溫度A,一級溫度B,一級溫度C, 169 二級溫度A,二級溫度B,二級溫度C, 170 三級溫度A,三級溫度B,三級溫度C, 171 ' FROM ',表名稱,year(FROM_UNIXTIME(開始時間)),LPAD(MONTH(FROM_UNIXTIME(開始時間)),2,'0'),' WHERE 時間>=',開始時間,' AND 時間<=',結束時間,' AND mod((時間-',開始時間,'),',時間間隔,') =0' 172 ); 173 PREPARE stmt1 FROM @sqlstr; 174 EXECUTE stmt1; 175 DEALLOCATE PREPARE stmt1; 176 END

查詢的表名稱是按照  ”jiexishuju+年+月”  如 "jiexishuju20220308" 自動分割槽的, 因為月份有可能是兩位和一位的,所以  第171行用到了

LPAD(str,len,padstr)函式   (注:返回字串str,將其左填充字串padstr至len個字元的長度。 如果str大於len,則返回值縮短為len個字元。)

結合三維力控的複選框查詢資料:

三維力控 呼叫儲存過程 :

#Report.ExecuteSQL(-1,"CALL dynamic_select1_copy(
        '"+表名稱+"',
        '"+IntToStr(start_time,10)+"','"+IntToStr(end_time,10)+"','"+IntToStr(time_interval,10)+"',
        '"+流量計1狀態+"','"+前壓1狀態+"','"+後壓1狀態+"','"+溫度1狀態+"',
        '"+流量計2狀態+"','"+前壓2狀態+"','"+後壓2狀態+"','"+溫度2狀態+"',
        '"+一級降壓A狀態+"','"+一級降壓B狀態+"','"+一級降壓C狀態+"','"+一級降壓D狀態+"',
        '"+二級降壓A狀態+"','"+二級降壓B狀態+"','"+二級降壓C狀態+"',
        '"+三級降壓A狀態+"','"+三級降壓B狀態+"','"+三級降壓C狀態+"','"+三級降壓D狀態+"',
        '"+一級降溫A狀態+"','"+一級降溫B狀態+"','"+一級降溫C狀態+"','"+一級降溫D狀態+"'
        )");

 

如果選中,則相應的引數值為‘b’,將欄位名賦值給變數,沒選中則賦值為空即 ‘’。