MySQL数据库8(二十四)函数

函数

在MySQL中,函数分为两类:系统函数(内置函数)和自定义函数html

不论是内置函数仍是用户自定义函数,都是使用select函数名(参数列表)mysql

内置函数

字符串函数

Mysql8 字符串函数sql

https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_instr数据库

 

char_length():判断字符串的字符数函数

length():判断字符串的字节数(与字符集)ui

concat():链接字符串加密

instr():判断字符在目标字符串中是否存在,其开始位置从1开始,存在返回其位置,不存在返回0spa

lcase():所有小写设计

left():从左侧开始截取到指定位置(位置若是超过长度,截取全部)3d

ltrim():消除左边对应的空格

mid():从中间位置开始截取,若是不指定截取长度,直接到最后

时间函数

Mysql8 时间函数

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

 

now():返回当前时间,日期 时间

curdate():返回当前日期

curtime():返回当前时间

datediff():判断两个日期之间的天数差距,参很多天期必须使用字符串格式(引号包裹)

date_add(日期,interval 时间数字 type):进行时间的增长

       type:day/hour/minute/second

unix_timestamp():获取时间戳

from_unixtime():将制定时间戳转换成对应的日期时间格式

 

 

数学函数

abs():绝对值

ceiling():向上取整

floor():向下取整

pow():求指数

rand():获取一个随机数(0-1)之间

round():四舍五入函数

其余函数

md5():对数据进行md5加密(mysql中的md5与其余任何地方的md5加密出来的内容是彻底相同的)

version():获取版本号

database():显示当前所在的数据库

uuid():生成一个惟一标识符(自增加),自增加是单表惟一,UUID是整库(数据惟一同时空间惟一)

 

 

自定义函数

自定义函数:用户本身定义的函数

函数:实现某种功能的语句块(由多条语句组成)

 

一、函数内部的每一条指令都是一个独立的个体:须要符合语句定义规范,须要语句结束符分号。

二、函数时一个总体,并且函数是在调用的时候才会被执行,那么当设计函数的时候,意味着总体不能中断。

三、mysql一旦见到语句结束符分号,就会自动开始执行

 

解决方案:在定义函数以前,尝试修改临时的语句结束符

基本语法:delimiter

修改临时语句结束符:delimiter 新符号;

中间为正常SQL指令:使用分号结束(系统不会执行,不认识分号)

使用新符号结束

修改回语句结束符:delimiter ;

 

建立函数

自定义函数包含几个要素:function关键字,函数名,参数(形参和实参[可选]),确认函数返回值类型,函数体,返回值

 

函数定义基本语法:

修改语句结束符

create function 函数名(形参) returns 返回值类型

begin

       //函数体

       return 返回值数据; //数据必须与结构中定义的返回值类型一致

end

语句结束符

修改语句结束符(改回来)

 

报:ERROR 1418(HY000)

 

解决方法:https://www.cnblogs.com/xihong2014/p/5566383.html

 

 

并非全部的函数都须要begin和end:若是函数体自己只有一条指令(return),那么能够省略begin和end。

 

形参:在mysql中须要为函数的形参指定数据类型(形参自己能够有多个)

基本语法:变量名 字段类型

 

 

查看函数

一、能够经过查看function状态,查看全部的函数

show function status [like ‘pattern’];

 

 

二、能够查看这个 函数的建立语句

show create function 函数名;

 

 

调用函数

自定义函数的调用和内置函数的调用是同样的:select 函数名(实参列表);

 

 

修改函数

alter function,其余与建立函数一致

删除函数

删除自函数:drop function 函数名;

 

 

注意事项

一、自定义函数是属于用户级别的,只有当前客户端对应的数据库中可使用

二、能够在不一样的数据库下看到对应的函数,可是不能够调用

三、自定义函数:一般是为了将多行代码集合到一块儿解决一个重复性问题

四、函数由于必须规范返回值,那么在函数内部不能使用select指令,select一旦执行就会获得一个结果(result set):select 字段 into @变量;(惟一可用)

 

 

流程结构案例

 

需求:从1开始,知道用户传入的对应的值为止,自动求和,凡是5的倍数都不要。

 

设计:

一、建立函数

二、须要一个形参,肯定要累加到什么为止

三、在函数体内部须要定义一个变量保存对应的结果 set @变量名

使用局部变量来操做:此结果是在函数内部使用

declare 变量名 类型 [=默认值]

四、内部须要一个循环来实现迭代累加

五、循环内部须要进行条件判断控制:5的倍数

六、函数必须有返回值

 

-- 建立一个自动求和的函数

-- 修改语句结束符
delimiter $$
-- 建立函数
create function my_sum(end_value int) returns int
begin
    -- 声明变量(局部变量):若是使用declare 声明变量,必须在函数体其余语句以前
    declare res int default 0;
    declare i int default 1;
    -- 循环处理
    mywhile:while i <= end_value do
        -- 判断当前数据是否合理
        if i % 5 = 0 then 
            -- 5的倍数不要
            set i = i + 1;
            iterate mywhile;
        end if;
        -- 修改变量 累加结果
        set res = res + i; -- mysql中没有++
        set i = i + 1;
    end while mywhile;
    -- 返回值
    return res;
end

-- 结束
$$

-- 修改语句结束符
delimiter ;

调用函数:select 函数名(实参);

相关文章
相关标签/搜索