函数

函数分类

任何函数都有返回值,函数的调用是有select调用。
mysql中字符串操作的基本单位为字符

系统函数

直接调用即可:
  • substring(str,pos,length);
    mysql中 下标从1开始
  • char_length
  • instr --判断某个子字符串是否在字符串中,返回位置
屏幕快照 2017-08-16 下午4.25.50.png
屏幕快照 2017-08-16 下午4.28.53.png

自定义函数

函数的要素:函数名,函数参数(形参,实参),返回值,函数体(作用域)

创建函数

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容