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

函数

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

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

内置函数

字符串函数

Mysql8 字符串函数

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

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

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

concat():连接字符串

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

lcase():全部小写

left():从左侧开始截取到指定位置(位置如果超过长度,截取所有)

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是整库(数据唯一同时空间唯一)

自定义函数

自定义函数:用户自己定义的函数

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

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

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

3、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中需要为函数的形参指定数据类型(形参本身可以有多个)

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

查看函数

1、可以通过查看function状态,查看所有的函数

show function status [like ‘pattern’];

2、可以查看这个 函数的创建语句

show create function 函数名;

调用函数

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

删除函数

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

注意事项

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

2、可以在不同的数据库下看到对应的函数,但是不可以调用

3、自定义函数:通常是为了将多行代码集合到一起解决一个重复性问题

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

流程结构案例

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

设计:

1、创建函数

2、需要一个形参,确定要累加到什么为止

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

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

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

4、内部需要一个循环来实现迭代累加

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

6、函数必须有返回值

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

-- 修改语句结束符
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 函数名(实参);

原文地址:https://www.cnblogs.com/sun-yanglu/p/9612923.html

时间: 2024-08-09 08:05:51

MySQL数据库8(二十四)函数的相关文章

Java学习总结(十八)——MySQL数据库(4)MySQL数据库中的视图,函数,存储过程中常见循环

一.MySQL存储过程中常见的循环1.while循环:WHILE.....DO.....END WHILE例1:创建存储过程(求1+2+.......+num的和):创建成功,进行调用:显示结果:2.REPEAT循环: REPEAT.........UNTLL END REPEAT例2:创建存储过程:创建完成,调用存储过程:显示结果:3.LOOP循环:LOOP END LOOP 例3:创建存储过程:创建成功,调用存储过程:显示结果:二.MySQL中的视图1.概念:有结构(有行有列),但没有结果(

我的MYSQL学习心得(十四) 备份和恢复

原文:我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十) 自定义存储过程

编译安装Mysql与管理(十四)

[教程主题]:编译安装Mysql与管理 [课程录制]: 创E [主要内容] [1]什么是Mysql MyQL是一个开放源码的小型关系型数据库管理系统,开发者为瑞典MySQL AB公司.目前MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库. [2]安装Mysql 一.安装简介 用户名:mysql安装目录:/usr/local/mysql-5.5数据库目录:/

我的MYSQL学习心得(十四)

我的MYSQL学习心得(十四) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 我的MYSQL学习心得(八) 我的MYSQL学习心得(九) 我的MYSQL学习心得(十) 我的MYSQL学习心得(十一) 我的MYSQL学习心得(十二) 我的MYSQL学习心得(十三) 这一篇<我的MYSQL学习心得(十四)>将会讲解MYSQL的备份和恢复

实验二十四:SD卡模块

  驱动SD卡是件容易让人抓狂的事情,驱动SD卡好比SDRAM执行页读写,SD卡虽然不及SDRAM的麻烦要求(时序参数),但是驱动过程却有猥琐操作.除此此外,描述语言只要稍微比较一下C语言,描述语言一定会泪流满面,因为嵌套循环,嵌套判断,或者嵌套函数等都是它的痛.. 史莱姆模块是多模块建模的通病,意指结构能力非常脆弱的模块,暴力的嵌套行为往往会击垮模块的美丽身躯,好让脆弱结构更加脆弱还有惨不忍睹,最终搞垮模块的表达能力.描述语言预想驾驭SD卡,关键的地方就是如何提升模块的结构能力.简单而言,描述

全栈JavaScript之路( 二十四 )DOM2、DOM3, 不涉及XML命名空间的扩展

(一)DocumentType 类型的变化新增三个属性: publicId,systemId,internalSubset(内部子集) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" [<!ELEMENT name (#PCDATA)>] > 通过, document.doc

mysql数据库 (二) mysql数据库的基本操作

上一次安装好mysql数据库以后并没有登录操作,这次来简单介绍下mysql的基本操作 一.访问mysql数据库(经过安装后的初始化过程,mysql数据库的默认管理员用户名为:"root",密码为空:注意此root并非是linux系统管理员的root账号) 1.登录mysql 未设置密码时,mysql后加"-u"指定用户就可以了 如果root设置了密码,还需要在用户名后面加"-p"选项指定密码 2.执行mysql操作语句 注意:每一条mysql语句

QT开发(二十四)——QT文件操作

QT开发(二十四)--QT文件操作 一.QT文件操作简介 QT中的IO操作通过统一的接口简化了文件与外部设备的操作方式,QT中文件被当作一种特殊的外部设备,文件操作与外部设备操作相同. 1.IO操作的主要函数接口 打开设备:bool open(OpenMode mode) 读取数据:QByteArray read(qint64 maxSize) 写入数据:qint64 write(const QByteArray & byteArray) 关闭设备:void close() IO操作的本质是连续

24、蛤蟆的数据结构笔记之二十四串的模式匹配算法

24.蛤蟆的数据结构笔记之二十四串的模式匹配算法 本篇名言:"燧石受到的敲打越厉害,发出的光就越灿烂. -- 马克思" 来看下两个算法,BF和KMP算法在串的模式匹配中实现. 欢迎转载,转载请标明出处: 1.  BF算法 BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果.B

iOS安全攻防(二十四):敏感逻辑的保护方案(1)

iOS安全攻防(二十四):敏感逻辑的保护方案(1) Objective-C代码容易被hook,暴露信息太赤裸裸,为了安全,改用C来写吧! 当然不是全部代码都要C来写,我指的是敏感业务逻辑代码. 本文就介绍一种低学习成本的,简易的,Objective-C逻辑代码重写为C代码的办法. 也许,程序中存在一个类似这样的类: @interface XXUtil : NSObject + (BOOL)isVerified; + (BOOL)isNeedSomething; + (void)resetPass