函数分类
任何函数都有返回值,函数的调用是有select调用。
mysql中字符串操作的基本单位为字符
系统函数
直接调用即可:
- substring(str,pos,length);
mysql中 下标从1开始 - char_length
- instr --判断某个子字符串是否在字符串中,返回位置
自定义函数
函数的要素:函数名,函数参数(形参,实参),返回值,函数体(作用域)
创建函数
create function 函数名([参数列表]) returns 数据类型 -- 规定返回值的数据类型
begin
--函数体
-- 返回值:
return 数据; -- 指定的数据类型
end
示例:
create function display1() returns int
return 100;
-- 调用
select display1();
屏幕快照 2017-08-16 下午4.51.17.png
查看函数
- 查看所有函数
show function status[like 'pattern']
- 查看函数的创建语句
show create function 函数名
show create function display1
函数的修改&修改
函数只能先删除后新增,不能修改
drop function 函数名
函数的参数
形参
function 函数名(形参名字 形参类型) returns 数据类型
DELIMITER $$
CREATE FUNCTION add_sum(num int ) RETURNS INT
BEGIN
set @res = 0;
set @i = 1;
WHILE @i <= num DO
set @res = @res + @i;
set @i = @i + 1;
END WHILE ;
RETURN @res;
END
$$
DELIMITER ;
屏幕快照 2017-08-16 下午5.11.31.png
作用域
mysql中的作用域和js一样
在函数内部用@符号定义的变量在函数外部也可以访问
SELECT @res,@i;
屏幕快照 2017-08-16 下午5.13.36.png
- 全局变量
全局变量在任何地方都能访问
使用set 定义 使用@标志 - 局部变量
局部变量在函数内部访问
使用 declare 声明 没有@符号,所有的局部变量声明,都要在函数体开始前
示例 :求1-n的和,但5的倍数不加
DELIMITER $$
CREATE FUNCTION loopadd(num int) RETURNS int
BEGIN
-- 声明局部变量
DECLARE res int DEFAULT 0;
DECLARE i int DEFAULT 1;
-- 开始循环
addwhile : WHILE i <= num DO
if i % 5 = 0 THEN
-- 修改循环条件
set i := i +1;
ITERATE addwhile;
end if;
set res := res + i;
set i := i+1;
end while;
return res;
END
$$
DELIMITER ;
屏幕快照 2017-08-16 下午5.35.54.png
网友评论