函数:
将一段代码块封装到一个结构中,在需要执行代码块的时候,调用结构即可(代码复用)

系统函数:系统定义好的函数,直接调用即可,任何函数都有返回值,因此函数的调用时通过select调用。

mysql中,字符是基本单位
substring:字符串截取(字符为单位)
--定义两个变量
set @cn = '世界你好'
set @en = 'hello world'
select substring(@cn,1,1);
select substring(@en,1,1);
mysql位置下标从1开始,截取单位为字符
char_length;字符长度
length:字节长度,和当前编码有关
-- 字符串长度
select char_length(@cn),char_length(@en),length(@cn),length(@en);

instr:在某个字符串是否在某个字符串中,存在返回位置,0代表没找到
-- 字符串查找
select instr(@cn,'世界'),instr(@en,'ll'),instr(@cn,'拜拜');
lPad:左填充,将字符串按照某个指定方式,填充到指定长度
-- 字符串填充
select lpad(!cn,20,'欢迎'),lpad(@en,20,'hello');
insert:替换,找到目标位置,指定长度的的字符串,替换为目标字符串
-- 字符串替换
select insert(@en,3,3,'y');
strcmp:字符串比较,小-1,等0,大1,不区分大小写
-- 字符串比较
set @f = 'hello';
set @s = 'hey';
set @t = 'HEY';
select strcmp(@f,@s),strcmp(@f,@t),strcmp(@f,@f);

自定义函数:
函数要素:函数名,参数,返回值,函数体(作用域)

创建函数:
语法:create function 函数名([形参列表]) returns 数据类型 --固定要反悔的数据类型
begin
-- 函数体
-- 返回值 return 类型
end

-- 定义函数
create function display() returns int
return 100;
自定义函数与系统函数一样
select 函数名(实参列表)
select display1();

查看函数
show function status[like 'pattern'];
查看函数创建语句:
show create function 函数名;
use information_schema;

修改&删除
函数只能先删除后新增
drop function 函数名;
--删除函数
drop function display1();

函数参数
参数:形参、实参,实参可以是变量,形参必须制定数据类型
function 函数名(形参名字 形参类型)
-- 计算1到指定书的和
delimiter $$
create function display2(int_1 int) returns int
begin
-- 定义条件变量
set @i = 1;
set @res = 0;
-- 循环求和
while @i <= int_1 do
-- 求和,任何变量要修改,必须使用set关键字
-- mysql没有+=,++
set @res = @res +@i;
-- 修改循环变量
set @i = @i +1;
end while
-- 返回值
return @res

end
$$
delimiter ;

在函数内部使用@定义的变量在函数外部也可以访问


作用域;mysql中的作用域与js中的作用域一样,全局变量可以再任何地方使用,局部变量只能在函数内部使用

全局变量:使用set关键字定义,使用@符号标志
局部变量:使用declare关键字声明,没有@符号,所有的局部变量必须在函数体之前
-- 求1到指定书之间的和,要求5的倍数不加

delimiter $$
create function display3(int_1 int) returns int
begin
-- 声明变量,循环变量,结果变量
declare i int default 1;
decalre res int default 0;-- 定义局部变量可以有属性
-- 循环判断
mywhile:while i <= int_1 do
-- 相加;判断
if i % 5 = 0 then
-- 修改循环条件
set i = i +1;
-- 不符合条件:循环从新来过
iterate mywhile;

end if;
--相加
set res = res +i;
-- 改变循环变量
set i = i+1;
end while;
return res;
end
$$
delimiter ;