关于MySQL存储过程不支持数组的解决办法

最近要生成些报表,遇到点难题,现在终于解决了,记录下来,方便大家查看,有问题大家一起交流,QQ:75361420
drop procedure if exists getdata;
delimiter $$;
create procedure getdata()
begin
 declare hydms varchar(100);
 declare i int;
 set hydms = '27,35,36,368,39,401'; #在这里定义一个以逗号分割字符串来作为数组
 set i=1;
 while i <= 6 do #开始循环,这里的6即代表数组的大小
  select
  B1 as '企业名称',
  B2 as '行业类别',
  C3 as '企业规模',
  F4 as '其中:产成品',
  F5 as '流动资产年平均余额(单位:千元)',
  F6 as '资产总计(单位:千元)',
  F7 as '负债合计(单位:千元)',
  F8 as '产品销售收入(主营业务收入,2009)(单位:千元)',
  F9 as '产品销售成本(主营业务成本,2009)(单位:千元)',
  F10 as '产品销售费用(营业费用,2009)(单位:千元)',
  F11 as '产品销售税金及附加(主营业务费用及附加,2009)(单位:千元)',
  F12 as '管理费用(单位:千元)',
  F13 as '财务费用(单位:千元)',
  F14 as '其中:利息支出(单位:千元)',
  F15 as '利润总额(单位:千元)',
  F16 as '本年应交增值税(单位:千元)',
  F17 as '应收账款净额(单位:千元)',
  V18  as '全部职工(从业人员平均人数)'
  from qy09_11
  where left(B2,3) like concat(substring_index(substring_index(hydms, ',' ,i),',',-1),'%')
	#上一行是核心代码,通过两次截串获取到数组元素,第一个参数是要截取的字符串#第二个参数是以什么符号来截取
	#第三个参数表示从第几个符号(第二个参数)开始截取
	#如果是正数表示从左边开始截取,负数表示从右边开始截取
	#当i=2时,第一次截取后是27,35,再截取时从右边截取一个,即获取到36,这样就获取到数组的第二个元素,以此类推
	#当然这个被截取的字符串你也可以输入参数传进来,我这里就写死了
  order by F8 limit 0,50;
  set i = i + 1;
 end while;
end$$;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值