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