MySql(13)--MySQL 自定义函数

自定义函数介绍
自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL。需要返回值,可以指定0-n个参数
这里写图片描述
这里写图片描述

select date_format(pubdate,’%Y-%m’) from bookinfo;
这里写图片描述
delimiter //
create function ym_date(mydate date)
returns varchar(15)
begin
return date_format(mydate,’%Y-%m’);
end//
delimiter ;

– 使用(调用)自定义函数
select ym_date(pubdate) from bookinfo;
这里写图片描述

二:创建和使用自定义函数
– 创建不带参数的函数
create function newdate()
returns varchar(20)
return date_format(curdate(),’%Y年%m月%d日’);

select newdate();
这里写图片描述

– 创建带有参数的函数
create function show_name_store(bid int)
returns varchar(50)
return (select concat_ws(‘—-‘,book_name,store) from bookinfo where book_id = bid);

select show_name_store(20150201);
这里写图片描述

– 删除函数
drop function newdate;
drop function if exists ym_date;

三:流程控制的使用
– 声明变量
delimiter //
create function show_name_store(bid int)
returns varchar(50)
begin
declare result varchar(50);
select concat_ws(‘—-‘, book_name, store) into result from bookinfo where book_id = bid;
return result;
end //
delimiter ;

select show_name_store(20150201);
这里写图片描述
这里写图片描述

/*
查询读者信息表,根据用户的余额判断用户的会员级别。
要求如下:
1、根据身份证号查询用户的余额
2、当用户的余额大于等于500时为金牌会员
3、当用户的余额大于等于300时为高级会员
4、当用户的余额大于等于200时为普通会员
5、小于200元,不能借书,显示‘非会员,余额不足’
*/

delimiter //
create function show_level(cid char(18))
returns varchar(10)
begin
declare lev varchar(10);
declare money decimal(7,3);
select balance into money from readerinfo where card_id = cid;
if money>=500 then
set lev = ‘金牌会员’;
elseif money>=300 then
set lev = ‘高级会员’;
elseif money>=200 then
set lev = ‘普通会员’;
else
set lev = ‘非会员,余额不足’;
end if;
return lev;
end//
delimiter ;

select show_level(card_id),balance from readerinfo;
这里写图片描述

这里写图片描述

delimiter //
create function show_level2(cid char(18))
returns varchar(10)
begin
declare lev varchar(10);
declare money decimal(7,3);
declare num int;
select balance into money from readerinfo where card_id = cid;
set num = truncate(money/100,0);
case num
when 0 then set lev = ‘非会员,余额不足’;
when 1 then set lev = ‘非会员,余额不足’;
when 2 then set lev = ‘普通会员’;
when 3 then set lev = ‘高级会员’;
when 4 then set lev = ‘高级会员’;
else set lev = ‘金牌会员’;
end case;
return lev;
end//
delimiter ;
这里写图片描述
这里写图片描述
delimiter //
create function show_level3(cid char(18))
returns varchar(10)
begin
declare lev varchar(10);
declare money decimal(7,3);
select balance into money from readerinfo where card_id = cid;
case
when money>=500 then set lev = ‘金牌会员’;
when money>=300 then set lev = ‘高级会员’;
when money>=200 then set lev = ‘普通会员’;
else set lev = ‘非会员,余额不足’;
end case;
return lev;
end//
delimiter ;
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42350428/article/details/81750096