存储过程,函数相关


//函数 function


//得到某个字符串某个符号分割之后的个数

CREATE DEFINER=`daojia_root`@`%` FUNCTION `calc_length`(str varchar(200), splitstr varchar(5)) RETURNS int(11)

BEGIN
return length(str)-length(replace(str, splitstr, ''))+1;  
END



//得到某个字符串按照某个符号分割之后的的第几个的值

CREATE DEFINER=`daojia_root`@`%` FUNCTION `split_string`(str varchar(200), splitstr varchar(5), strindex int) RETURNS varchar(255) CHARSET utf8
BEGIN
declare result varchar(700) default '';  
set result =reverse(substring_index( reverse(substring_index(str, splitstr, strindex)), splitstr, 1));  
return result;  
END



//得到某个字符串 按照符号分割将分割之后的值重新拼接成新的字符串返回

CREATE DEFINER=`daojia_root`@`%` FUNCTION `hebing`(str varchar(700)) RETURNS varchar(700) CHARSET utf8
BEGIN


declare cnt int default 0;  
declare i int default 0;  
declare result varchar(700) default '';
set cnt = calc_length(str, ';');  


while i<cnt
do 


set i=i+1;
 set @onegps =split_string(str,';',i);
 set @cnt2= calc_length(@onegps, ',');//调用上边的方法
 set @j=0;
 while @j<@cnt2
 do 
 set @j=@j+1;
  set @oneonegps =split_string(@onegps,',',@j);//调用上边的方法
  if @j=1 
  then
  set @lng=concat('{"lng":','"',@oneonegps,'"');
  else
  set @lat=concat(',"lat":','"',@oneonegps,'"}');
  END IF;  
  set @gps=concat(@lng,@lat);
  if result=''
  then 
   set result=concat( result,@gps);
   else
  set result=concat( result,',',@gps);
  end if;
 end while;
end while;
set  result=concat( "[",result,"]");
return result;


END



//示例  直接在select的返回字段值上调用上边的函数

    SELECT 
    CAST(id AS CHAR),
    market AS biz_name,
    HEBING(points) AS biz_range,
    city_id,
    biz_center,
    'SY',
    '2018-01-01',
    '2099-01-01'
FROM
    bdap.t_dim_biz_suyun_new


//存储过程

CREATE DEFINER=`daojia_root`@`%` PROCEDURE `hecheng`(in str varchar(500) , out result varchar(1000))
BEGIN


declare cnt int default 0;  
declare i int default 0;  
set cnt = calc_length(str, ';');  
set result ='';
while i<cnt
do 


set i=i+1;
 set @onegps =split_string(str,';',i);
 set @cnt2= calc_length(@onegps, ',');
 set @j=0;
 while @j<@cnt2
 do 
 set @j=@j+1;
  set @oneonegps =split_string(@onegps,',',@j);
  if @j=1 
  then
  set @lng=concat('{"lng":','"',@oneonegps,'"');
  else
  set @lat=concat(',"lat":','"',@oneonegps,'"}');
  END IF;  
  set @gps=concat(@lng,@lat);
  if result=''
  then 
   set result=concat( result,@gps);
   else
  set result=concat( result,',',@gps);
  end if;
 end while;
end while;
set  result=concat( "[",result,"]");
END

//调用示例



 call hecheng('116.341645,39.646486;116.377645,39.646486;116.377645,39.673486;116.341645,39.673486',@s);

 select @s;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值