MySQL函数

函数

MySQL函数与其存储过程类似,是一系列完成某种功能的SQL语句。函数一旦定义后,与过程一样是存储在MySQL的服务器上。调用函数就是一次性执行这些语句。所以函数可以降低语句重复。

MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利,MySQL提供的常用函数包括聚合函数,字符串函数,日期时间函数,控制流函数等。

MySQL除了可以使用它提供的内置函数外,我们亦可以按照我们的要求来实现我们自己的功能,可是这个函数式系统不能提供的因为这中需求的不确定性。因此我们需要自己来解决这种需求。还好MySQL设计的扩展性给了我们这个机会,我们可以通过自定义函数的功能解决这个问题。

函数名称 作用
abs 绝对值
mod 求余数
sqrt 求二次方根
ceil和ceiling 都是小于参数的最小整数,向上取整
floor 向下取整,返回值转换为bigint
rand 生成0-1的之间的随机数
round 四舍五入
sign 返回带参数的符号
pow和 power 都是所传代数的次方的结果值
sin 求正弦值
asin 求反正弦值,
cos 求余弦值
acos 求反余弦值
tan 求正切值
atan 求反正切值
cot 求余切值

abs:求绝对值

函数abs(x)返回x的绝对值,正数的绝对值时本身,负数的绝对值时相反数,0的绝对值是0

select abs(5),abs(1.1),abs(-3.3),abs(0);

MySQL函数_第1张图片

sqrt:求二次方根(开方)

函数SQRT(x)返回非负数x的二次方根,负数没有平方根,返回结果为null

select sqrt(25),sqrt(120),sqrt(-9);

MySQL函数_第2张图片

mod:求余数

函数mod(x,y)返回x被y除后的余数,mod()对于带小数部分的数据也会起作用,返回除法算后的余数

select mod(63,8),mod (120,10),mod(15.5,3);

MySQL函数_第3张图片

ceil和ceiling:向上取整

函数ceil和ceiling的意义是相同的,返回不小于x的最小整数值,返回值转换为一个bigint

select ceil(-2.5),ceil(3.3),ceiling(2.5);

MySQL函数_第4张图片

floor:向下取整

函数floor(x)返回小于x的最大整数值

select floor(5),floor(5.66),floor(-4),floor(-4.66);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j4UmjHe9-1679467513332)(MySQL函数.assets/image-20220923155403289.png)]

rand:生成一个随机数

生成一个0-1之间的随机数

select rand(),rand(),rand();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCdSDOy9-1679467513332)(MySQL函数.assets/image-20220923155616569.png)]

round:四舍五入

返回最近于参数x的整数,round(x)函数对参数x进行四舍五入的操作,

select round(-6.6),round(-8.44),round(3.44);

MySQL函数_第5张图片

sign:返回参数的符号

返回参数的符号x的值为负数,零和正数时分别返回-1,0,1

select sign(-6),sign(0),sign(34);

MySQL函数_第6张图片

pow和 power:次方函数

函数用于计算x的y次方

select pow(5,-2),pow(10,3),power(4,3),pow(100,0),power(6,-3);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3bobDcKJ-1679467513333)(MySQL函数.assets/image-20220923160615569.png)]

sin:正弦函数

sin(x)返回x的正弦值,x值为弧度值

select sin(1),sin(0.5*pi()),pi();

MySQL函数_第7张图片

asin:求反正弦值,

select asin(30),asin(25);

MySQL函数_第8张图片

MySQL字符串函数

函数名称 作用
length 计算字符串长度函数,
concat 字符串拼接
insert 替换字符串函数
lower 将字符串中的字母转换为小写
upper 将字符串中的字母转换为大写
left 从左侧截取字符串,返回字符串左边的若干个字符
right 从右侧截取字符串,返回字符串右边的若干个字符
trim 删除字符串左右两侧的空格
replace 字符串替换函数,返回替换后的新字符串
substr和substring 截取字符串
reverse 字符串反转

length:返回字符串长度

返回值为字符串的字节长度,unicode码为utf8,为万国码,变长字符出,一个汉字占3个字节,一个数据或者字母占一个字节

select length('helloworld');

MySQL函数_第9张图片

concat:字符串拼接

select concat('张三','java'),concat('李','四','java');

MySQL函数_第10张图片

insert:替换字符串

insert(s1,x,len,s2)返回字符串s1,子字符串起始于x位置,并且用len个字符长的字符串代替为s2

select insert('java',2,4,'**')As col1,
       insert('shell',-1,4,'**')as  col2,
       insert('张三学习java',3,20,'**')as col3;

MySQL函数_第11张图片

lower:将字母转换为小写

lower(str)可以将字符串str中的字母全部转换为小写

select lower('张三JAVAZHANGSAN');

MySQL函数_第12张图片

upper:将字母转换为大写

upper(str)可以将字符串str中的字母字符全部转换为大写

select upper('张三javazhangsan');

MySQL函数_第13张图片

left:从左侧截取字符串

select left('张三java',2),left('李四java',4),left('王五',-1);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MPSsvQaq-1679467513336)(MySQL函数.assets/image-20220923170220693.png)]

right:从右侧截取字符串

select right('张三java',2),right('李四java',4),right('王五',-1);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EF3QRS51-1679467513336)(MySQL函数.assets/image-20220923170301064.png)]

trim:删除字符串两侧空格

select '   [      zhagnsan      ]    ',concat('[ ,李四 ]'),trim( '   [ zhagnsan ]    ');

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M2Lr1Bk9-1679467513336)(MySQL函数.assets/image-20220923170532433.png)]

substr和substring截取字符串

select substr('javaScipt',3)

MySQL函数_第14张图片

select substr('javaScipt',3,2)

MySQL函数_第15张图片

reverse:反转字符串

select reverse('张三java')

MySQL函数_第16张图片

MySQL日期和时间函数

函数名称 作 用
curdate 和 current_date 两个函数作用相同,返回当前系统的日期值
curtime 和 current_time 两个函数作用相同,返回当前系统的时间值
now 和 sysdate 两个函数作用相同,返回当前系统的日期和时间值
unix_timestamp 获取UNIX时间戳函数,返回一个以 UNIX 时间戳为基础的无符号整数
from_unixtime 将 UNIX 时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数
month 获取指定日期中的月份
monthname 获取指定日期中的月份英文名称
dayname 获取指定曰期对应的星期几的英文名称
dayofweek 获取指定日期是一周中是第几天,返回值范围是1~7,1=周日
week 获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1〜53
dayofyear 获取指定曰期是一年中的第几天,返回值范围是1~366
dayofmonth 获取指定日期是一个月中是第几天,返回值范围是1~31
year 获取年份,返回值范围是 1970〜2069
time_to_sec 将时间参数转换为秒数
sec_to_time 将秒数转换为时间,与TIME_TO_SEC 互为反函数
date_add 和 adddate 两个函数功能相同,都是向日期添加指定的时间间隔
date_sub 和 subdate 两个函数功能相同,都是向日期减去指定的时间间隔
addtime 时间加法运算,在原始时间上添加指定的时间
subtime 时间减法运算,在原始时间上减去指定的时间
datediff 获取两个日期之间间隔,返回参数 1 减去参数 2 的值
date_format 格式化指定的日期,根据参数返回指定格式的值
weekday 获取指定日期在一周内的对应的工作日索引

curdate 和 current_date:返回当前系统的日期值

select curdate(),current_date,current_date+1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dbsbtx9q-1679467513338)(MySQL函数.assets/image-20220924105200282.png)]

curtime 和 current_time:返回系统当前时间

select curtime(),current_time,current_time+1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rwkmulGK-1679467513338)(MySQL函数.assets/image-20220924105408355.png)]

now 和 sysdate:获取当前时间日期

select now(),sysdate();

MySQL函数_第17张图片

unix_timestamp:获取unix时间戳

select unix_timestamp();

MySQL函数_第18张图片

from_unixtime:时间戳转日期

格式 说明
%M 月名字
%W 星期名字
%D 有英语前缀的月份和日期
%Y 年,数字,4位
%y 年,数字,2位
%d 月份的天数,(00-31)
%e 月份的天数,(0-31)
%a 缩写的星期名字
%m 月,数字(01-12)
%c 月,数字(1-12)
%b 缩写的月份名字(Jan-Dec)
%j 一年中的天数(001-366)
%H 小时(00-23)
%h 小时(01-12)
%l(L的小写) 小时(1-12)
%k 小时(0-23)
%I(i的大写) 小时(01-12)
%i 分钟,数字(00-59)
%S 秒(00-59)
%s 秒(00-59)
%r 时间,12小时(hh:mm:ss [AP]M)
%T 时间,24小时(hh:mm:ss)
%p AM或者PM
%U 星期(0-52)星期天是星期第一天
%u 星期(0-52)星期一是星期的第一天
%% 输出%
select from_unixtime(1663989244),from_unixtime(1663989244,'%Y-%m-%d %H:%i:%s');

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xkUjD8hb-1679467513339)(MySQL函数.assets/image-20220924111426674.png)]

month:指定日期的月份

select month('2022-9-24'),month(now());

MySQL函数_第19张图片

monthname:获取指定日期月份的英文名称

select monthname('2022-9-24'),monthname(now());

MySQL函数_第20张图片

dayname:获取指定日期的星期名称

select now(),dayname(now());

MySQL函数_第21张图片

dayofweek:获取日期对应的周索引

1表示周天,2表示周一,。。。。

select now(),dayofweek('2022-9-25');

MySQL函数_第22张图片

week:获取指定日期是一年中的第几周

模式 一周的第一天 范围
0 星期日 0-53
1 星期一 0-53
2 星期日 1-53
3 星期一 1-53
4 星期日 0-53
5 星期一 0-53
6 星期日 1-53
7 星期一 1-53
select now(),week('2022-12-31');

MySQL函数_第23张图片

dayofyear:获取指定曰期是一年中的位置

select now(),dayofyear(now()),dayofyear('2020-12-31');

在这里插入图片描述

dayofmonth:获取指定日期在一个月的位置

select now(),dayofmonth(now()),dayofmonth('2020-12-31');

在这里插入图片描述

year:获取年份

select now(),year(now()),year('2020-12-31');

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WhXYMF0F-1679467513341)(MySQL函数.assets/image-20220924113730723.png)]

time_to_sec:将时间转换位秒值

select time_to_sec('5:5:5'),now(),time_to_sec(now());

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ik4uaRM8-1679467513342)(MySQL函数.assets/image-20220924114042818.png)]

sec_to_time:将秒转换为时间格式

select sec_to_time('18305'),now(),sec_to_time('42004');

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lHefYe6U-1679467513342)(MySQL函数.assets/image-20220924114157252.png)]

date_add 和 adddate:向日期添加指定时间间隔

select date_add('2022-9-21',interval 365 day );

MySQL函数_第24张图片

date_sub 和 subdate:日期减法运算

select date_sub('2022-9-21',interval 365 day );

MySQL函数_第25张图片

addtime:时间加法运算

select addtime('2022-9-24 11:47:36','0:1:1');

MySQL函数_第26张图片

subtime:时间减法运算

select subtime('2022-9-24 11:47:36','0:1:1');

MySQL函数_第27张图片

datediff:获取两个时间的时间间隔

select datediff('2022-9-24','2019-12-26');

MySQL函数_第28张图片

date_format:格式化指定的日期

select date_format('2022-9-24','%Y年%m月%d日');

MySQL函数_第29张图片

weekday:获取指定日期在一周内的索引位置

select now(),weekday(now());

MySQL函数_第30张图片

MySQL聚合函数

函数名称 作用
max 查询指定列的最大值
min 查询指定列的最小值
count 统计查询结果的行数
sum 求和,返回指定列的总和
avg 求平均值,返回指定列数据的平均值

MySQL流程控制函数

函数名称 作用
if 判断,流程控制
ifnull 判断是否为空
case 搜索语句

if:判断

if(expr,v1,v2)

当expr为真是返回v1的值,为假返回v2的值

select if(1<2,1,0),if(1>5,'√','×');

MySQL函数_第31张图片

ifnull:判断是否为空

ifnull(v1,v2):当v1为空则放回v2,当v1有值则放回v1

select ifnull('非空','为空'),ifnull(null,'空'),ifnull('空',null),ifnull(null,null);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0PpenBrs-1679467513344)(MySQL函数.assets/image-20220926103358296.png)]

case:搜索语句

方式1:

case <表示式>

​ when<值1> then<操作>

​ 。。。

​ else<操作>

end case;

方式2:

case

​ when<值1> then<命令>

​ 。。。

​ else commands

end case;

create table t_stu(
    id int auto_increment comment '学号',
    name varchar(20) comment '姓名',
    sex tinyint comment '性别,0:未知,1:男,2:女',
    primary key (id)
)charset = utf8mb4 collate = utf8mb4_bin engine = InnoDB;

insert into t_stu(name,sex) values ('张三',1),
                                   ('李四',2),
                                   ('王五',1);
insert into t_stu(name, sex) values ('赵六',3),('唐七',0);

select id, name, sex from t_stu;

MySQL函数_第32张图片

需求:查询所有学生信息,输出姓名,性别(男,女,未知)

select name '名字', (case sex
    when 1
        then '男'
    when 2
        then '女'
    else '未知' end) '性别' from t_stu;

其他函数

函数名称 作用
version 数据库版本号
database 当前数据库
user 当前连接用户名
password 返回字符串密码形式
md5 返回字符串的md5数据
select version();
select database();
select user();
select password('123456');
select md5('zhangsan123456lisiwangwu123456')

自定义函数

创建语法:

create function 参数名称(参数1 参数类型1,参数2 参数类型2…) returns 数据类型

begin

​ 函数体;

​ return(返回值);

end

调用语法:

select 函数名称(传参数);

删除语法:

drop function if exists 自定义函数名称

create function getpi(pi double,r int)
returns double
begin
    # 定义一个变量 a 变量为double类型 初始值为0;
    declare a double default 0;
    set a = pi * r * 2;
    return a;
end;
select getpi(3.1415926,3);

你可能感兴趣的:(mysql,mysql,数据库)