函数

作者: 陈智涛 | 来源:发表于2017-08-16 17:39 被阅读0次

    函数分类

    任何函数都有返回值,函数的调用是有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

    相关文章

      网友评论

          本文标题:函数

          本文链接:https://www.haomeiwen.com/subject/fdgirxtx.html