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’,将字段名赋值给变量,没选中则赋值为空即 ‘’。