MySQL数据库之内置函数和自定义函数 function

 更新时间:2022年6月16日 10:32  点击:47 作者:彭世瑜

前言:

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

使用函数:

select 函数名(参数列表);

1、内置函数

1.1、字符串函数

函数名说明
char_length判断字符串的字符数
length判断字符串的字节数,与字符集有关
concat连接字符串
insrt检查字符是否在目标字符串中,存在返回其位置,不存在返回 0
lcase全部小写
ltrim消除左边的空格
left(str, length)左侧开始截取字符串,直到指定位置
right(str, length)右侧开始截取字符串,直到指定位置
mid从中间指定位置开始截取,如果不指定截取长度,直接到最后
substring(str, index, [length])从指定位置开始,指定截取长度
substring_index(str, delim, count)按照关键字截取

示例:

select char_length('你好中国'); // 4
select length('你好中国'); // 12
select length('hello'); // 5
select char_length('hello'); // 5
select concat('你好', '中国'); // 你好中国
-- 下标从 1 开始
select instr('你好中国', '中国'); // 3
select instr('你好中国', '我'); // 0
select lcase('aBcd'); // abcd
select left('aBcd', 2); // aB
select right('abcdef', 2); // ef
select substring('abcdef', 2, 3); // bcd
select substring('abcdef', -2, 3); // ef
select ltrim(' abc d '); // abc d
select mid('你好中国', 3); // 中国
select substring_index('www.baidu.com', '.', 2); // www.baidu
select substring_index('www.baidu.com', '.', -2); // baidu.com

1.2、时间函数

函数名说明
now()返回当前时间,日期 时间
curdate()当前日期
curtime()当前时间
datediff()判断两个日期之间的天数之差,日期使用字符串格式(用引号)
date_add(日期, interval 时间数字 type)时间增加(type:
unix_timestamp()获取时间戳
from_unixtime()将指定时间戳转换成对应的日期时间格式

示例:

select now(); // 2022-04-10 22:05:38
select curdate(); // 2022-04-10
select curtime(); // 22:05:51
select datediff('2022-01-09', '2022-01-01'); // 8
select date_add('2000-10-01', interval 10 day); // 2000-10-11
select unix_timestamp(); // 1649599799
select from_unixtime(1649599799); // 2022-04-10 22:09:59

1.3、数学函数

函数名说明
abs绝对值
ceiling向上取整
floor向下取整
pow指数
rand随机数(0-1)
round四舍五入

示例:

select abs(-1); // 1
select ceiling(1.1); // 2
select floor(1.9); // 1
select pow(2, 4); // 16
select rand(); // 0.2616088308967732
select round(1.5); // 2

1.4、其他函数

函数名说明
md5()MD5
version()版本号
database()显示当前所在数据库
uuid()生成一个唯一标识符,全局唯一

示例:

select md5('abc'); // 900150983cd24fb0d6963f7d28e17f72
select version(); // 8.0.16
select database(); // mydatabase
select uuid(); // c44a06a2-b8d8-11ec-a53c-504259f9d746

2、自定义函数

mysql一旦见到分号结束符,就会开始执行

修改语句结束符

基本语法:

delimiter 符号;

2.1、创建函数

基本语法:

-- 修改语句结束符
delimiter $$;
create function 函数名(形参) returns 返回值类型
begin
    // 函数体
    return 返回值数据;
end
语句结束符
-- 将语句结束符修改回来
delimiter ;

示例:

-- 修改语句结束符
delimiter $$
create function my_func1() returns int
begin
    return 10;
end
-- 结束
$$
-- 将语句结束符改回来
delimiter ;

如果只有一条语句,可以省略begin 和 end

-- 最简单的函数
create function foo() returns int
return 10;

为函数的形参指定数据类型

基本语法:

形参 数据类型

示例:

create function my_func2(a int, b int) returns int
return a * b;

2.2、查看函数

基本语法:

show function status [like 'pattern'];

示例:

-- 查看所有函数
show function status\G
-- 查看单个函数
mysql> show function status like 'foo'\G
*************************** 1. row ***************************
                  Db: mydatabase
                Name: foo
                Type: FUNCTION
             Definer: [email protected]
            Modified: 2022-04-10 22:34:06
             Created: 2022-04-10 22:34:06
       Security_type: DEFINER
             Comment:
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8mb4_general_ci
1 row in set (0.00 sec)
-- 查看函数创建语句
mysql> show create function foo\G
*************************** 1. row ***************************
            Function: foo
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
     Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `foo`() RETURNS int(11)
return 10
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
  Database Collation: utf8mb4_general_ci
1 row in set (0.01 sec)

2.3、调用函数

基本语法

select 函数名(实参列表);

示例:

mysql> select foo();
+-------+
| foo() |
+-------+
|    10 |
+-------+
mysql> select my_func2(2, 3);
+----------------+
| my_func2(2, 3) |
+----------------+
|              6 |
+----------------+

2.4、删除函数

基本语法

drop function 函数名;

示例:

drop function my_func1;

2.5、注意事项

  • 自定义函数属于用户级别,只有当前客户端对应的数据库中可以使用
  • 可以在不同数据库下看到函数,但是不可以调用
  • 自定义函数通常是为了将多行代码集合到一起解决一个重复性的问题

4.函数必须规范返回值,那么在函数内部不能使用select指令,select一旦执行就会的到一个结果集 result set;

可以使用给变量赋值语句

select 字段 into @变量;

3、函数流程结构案例

需求:

从1开始,直到用户传入的对应的值位置,自动求和,凡是5的倍数都不要

设计

  • 创建函数
  • 需要一个形参,确定要累加到什么位置
  • 需要定义一个变量来保存对应的结果
  • 内容部需要一个循环来实现迭代累加
  • 循环内部需要进行条件判断控制,5的倍数

定义函数:

-- 创建一个自动求和的函数
-- 修改语句结束符
delimiter $$
-- 创建函数
create function my_sum(end_value int) returns int
begin
    -- 声明局部变量
    declare res int default 0;
    declare i int default 0;
    -- 循环处理
    mywhile: while i <= end_value do
        -- mysql中没有++
        set i = i + 1; 
        --  判断当前数据是否合理
        if i % 5 = 0 then
            iterate mywhile;
        end if;
        -- 修改变量,累加
        set res = res + i;
    end while;
    -- 返回值
    return res;
end

-- 结束
$$
-- 修改语句结束符
delimiter ;

调用函数:

-- 实参个数必须等于形参个数
select my_sum(10);

原文出处:https://blog.51cto.com/u_13567403/5382948

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • mysql的3种分表方案

    一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • PHP YII框架开发小技巧之模型(models)中rules自定义验证规则

    YII的models中的rules部分是一些表单的验证规则,对于表单验证十分有用,在相应的视图(views)里面添加了表单,在表单被提交之前程序都会自动先来这里面的规则里验证,只有通过对其有效的限制规则后才能被提交,可以很有效地保证...2015-11-24
  • Centos5.5中安装Mysql5.5过程分享

    这几天在centos下装mysql,这里记录一下安装的过程,方便以后查阅Mysql5.5.37安装需要cmake,5.6版本开始都需要cmake来编译,5.5以后的版本应该也要装这个。安装cmake复制代码 代码如下: [[email protected] ~]# wget http://www.cm...2015-03-15
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • PHP编码转换函数mb_convert_encoding与iconv用法

    文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。 将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查...2016-11-25
  • php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

    最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21
  • 忘记MYSQL密码的6种常用解决方法总结

    首先要声明一点,大部分情况下,修改MySQL密码是需要有mysql里的root权限的...2013-09-11
  • pytorch 自定义卷积核进行卷积操作方式

    今天小编就为大家分享一篇pytorch 自定义卷积核进行卷积操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-06
  • 自定义jquery模态窗口插件无法在顶层窗口显示问题

    自定义一个jquery模态窗口插件,将它集成到现有平台框架中时,它只能在mainFrame窗口中显示,无法在顶层窗口显示. 解决这个问题的办法: 通过以下代码就可能实现在顶层窗口弹窗 复制代码 代码如下: $(window.top.documen...2014-05-31