MySQL学习笔记(24)-函数

函数

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

函数分为两类:系统函数和自定义函数

系统函数

系统定义好的函数,直接调用即可。

任何函数都有返回值,因此函数的调用是通过select调用。

Mysql中,字符串的基本操作单位(最常见的是字符)

Substring:字符串截取(字符为单位) 

-- 定义两个变量
set @cn = '世界你好';
set @en = 'hello world';
-- 字符串截取
select substring(@cn,1,1);
select substring(@en,1,1);

char_length:字符长度

Length:字节长度

-- 字符串长度
select char_length(@cn),char_length(@en),length(@cn),length(@en);

Instr:判断字符串是否在某个具体的字符串中存在,存在返回位置

-- 字符串寻找
select instr(@cn,'界'), instr(@en,'ll'),instr(@cn,'拜拜');

Lpad:左填充,将字符串按照某个指定的填充方式,填充到指定长度(字符)

-- 字符串填充
select lpad(@cn,20,'欢迎'),lpad(@en,20,'hello');

Insert:替换,找到目标位置,指定长度的字符串,替换成目标字符串

-- 字符串替换
select insert (@en,3,3,'y'),@en;

Strcmp:compare,字符串比较

-- 字符串比较
set @f = 'hello';
set @s = 'hey';
set @t = 'HEY';
select strcmp(@f,@s),strcmp(@s,@t),strcmp(@s,@f);

自定义函数

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

创建函数

Create function 函数名([形参列表]) return 数据类型 -- 规定要返回的数据类型

Begin

    -- 函数体

    -- 返回值:return 类型(指定数据类型);

  End

定义函数

-- 创建函数
create function display() returns int
return 100;

自定义函数与系统函数的调用方式一样:select 函数名([实参列表]);

-- 调用函数
select display();

查看函数

查看所有函数:show function status[like 'pattern'];

-- 查看所有函数
show function status\G

查看函数的创建语句:show create function 函数名;

-- 查看函数创建语句
show create function display\G

修改函数&删除函数

函数只能先删除后新增,不能修改。

Drop function 函数名;

-- 删除函数
drop function display;
show function status\G

函数参数

参数分为两种:定义时的参数叫形参,调用时的参数叫实参(实参可以是数值也可以是变量)

形参:要求必须指定数据类型

Function函数名(形参名字 字段类型)returns 数据类型

-- 做函数:计算1-指定数之间的和
delimiter $$
create function display1(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 ;

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

select display1(10);
select @res,@i;

作用域

Mysql中的作用域与js中的作用域完全一样

    全局变量可以在任何地方使用;局部变量只能在函数内部使用。

全局变量:使用set关键字定义,使用@符号标志

局部变量:使用declare关键字声明,没有@符号:所有的局部变量的声明,必须在函数体开始之前

-- 求和:1-指定数之间的和,要求5的倍数不加
delimiter $$
create function display2(int_1 int) returns int
begin
 -- 声明变量:循环变量,结果变量
 declare i int default 1;
 declare 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 ;
select display2(10);


猜你喜欢

转载自blog.csdn.net/qq_38826019/article/details/80668042
今日推荐