详解【MySQL函数】

MySQL函数详细解析

目录

一. MySQL函数简介

二. 单行函数

(一) 字符函数

1. 大小写处理函数

2. 字符处理

(二) 数字函数

(三) 日期函数

(四) 转换函数

2. 显示数据类型转换 可以放什么图

(五) 通用函数

三. 聚合函数(多行函数)

四. 总结


前言

本文来讲解一下MySQL中的函数,本文适合用于预习,复习等

旨在帮助读者更好的理解和掌握MySQL的函数

个人主页:主页        

系列专栏:专栏

一. MySQL函数简介

每个数据库的函数都会差异

SQL函数主要解决有以下目的:

  1. 执行数据计算(求和,平均值)
  2. 修改单个数据项
  3. 操纵输出进行行分组
  4. 格式化显示的日期和数字
  5. 转换列数据类型( 当前类型变为另一种类型,解决类型不匹配问题 )

分为:单行函数和多行函数(又叫 聚合函数)

二. 单行函数

单行函数仅仅只对单个行进行运算,并且每行返回一个结果
常见的函数类型:字符、数字、日期、转换、通用

(一) 字符函数

1. 大小写处理函数

函数

描述

例子🌰

lower(s) 或者 lcase(s)

将字符串 s 转换为小写

将字符串 OLDLU 转换为小写:
select lower ("YIBEI");   -->  yibei

upper(s) 或者 ucase(s)

将字符串 s 转换为大写

将字符串 oldlu 转换为大写:
select upper ("yibei");   -->  YIBEI

这里转换大小写都有两种写法

2. 字符处理

函数

描述

例子🌰

length(s)

返回字符串 s 的长度

返回字符串 oldlu 的字符数:
select length ("yibei"); -->  5

concat(s1,s2...sn)

字符串 s1, s2 等多个字符串合并为一个字符串

合并多个字符串:
select concat ("yi", "bei", "gen"); -- > yibeigen

lpad(s1,len,s2)

在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len

将字符串 x 填充到 oldlu 字符串的开始处:select lpad ('yibei',8,'x'); -- xxxyibei

ltrim(s)

去掉字符串 s 开始处的空格

去掉字符串 oldlu 开始处的空格:
select ltrim ("yibei"); -- yibei

replace(s,s1,s2)

将字符串 s2 替代字符串 s 中的字符串 s1

将字符串 oldlu 中的字符 o 替换为字符 O:select replace ('yibei','y','M'); -- Mibei

reverse(s)

将字符串 s 的顺序反过来

将字符串 abc 的顺序反过来:
select reverse ('abc'); --> cba

rpad(s1,len,s2)

在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len

将字符串 xx 填充到 oldlu 字符串的结尾处:select rpad ('yibei',8,'x'); --> yibeixxx

rtrim(s)

去掉字符串 s 结尾处的空格

去掉字符串 yibei 的末尾空格:
select rtrim ("oldlu"); -- oldlu

substr(s, start, length)

从字符串 s 的 start 位置截取长度为 length 的子字符串

从字符串 yibei 中的第 2 个位置截取 3 个字符:select substr ("yibei", 1, 3); -- yib

substring(s, start, length)

从字符串 s 的 start 位置截取长度为 length 的子字符串

从字符串 yibei 中的第 2 个位置截取 3 个字符:select substring ("yibei", 1, 3); -- yib

trim(s)

去掉字符串 s 开始和结尾处的空格

去掉字符串 yibei 的首尾空格:
select trim ('  yibei  '); -- yibei

这里列举了10个常用字符函数,并加上了对应的例子
tips:在substr 和 substring 函数功能都是一样的,并且字符都是从1开始(不要受java的影响了O(∩_∩)O哈哈~)

(二) 数字函数

函数名

描述

例子🌰

abs(x)

返回 x 的绝对值

返回 -1 的绝对值:
select abs (-1) --> 返回 1

avg(expression)

返回一个表达式的平均值,expression 是一个字段

返回 products 表中 price 字段的平均值:
select avg (price) as averageprice from products;

count(expression)

返回查询的记录总数,expression 参数是一个字段或者 * 号

返回 products 表中 productid 字段总共有多少条记录:
select count (productid) as numberofproducts from products;

n div m

整除,n 为被除数,m 为除数

计算 10 除于 5:
select 10 div 5; --> 2

exp(x)

返回 e 的 x 次方

计算 e 的三次方:
select exp (3) --> 20.085536923188

greatest(expr1, expr2, expr3, ...)

返回列表中的最大值

返回以下数字列表中的最大值:
select greatest (3, 12, 34, 8, 25); --> 34
返回以下字符串列表中的最大值:
select greatest ("google", "runoob", "apple");
--> runoob

least(expr1, expr2, expr3, ...)

返回列表中的最小值

返回以下数字列表中的最小值:
select least (3, 12, 34, 8, 25); --> 3
以下字符串列表中的最小值:
select least ("google", "runoob", "apple"); --> apple

ln

返回数字的自然对数,以 e 为底。

返回 2 的自然对数:
select ln (2); --> 0.6931471805599453

max(expression)

返回字段 expression 中的最大值

返回数据表 products 中字段 price 的最大值:
select max (price) as largestprice from products;

min(expression)

返回字段 expression 中的最小值

返回数据表 products 中字段 price 的最小值:select min (price) as minprice from products;

mod(x,y)

返回 x 除以 y 以后的余数

5 除于 2 的余数:
select mod (5,2) -- >1

pi()

返回圆周率 (3.141593)

select pi() -->  3.141593

pow(x,y)

返回 x 的 y 次方

2 的 3 次方:
select pow (2,3) --> 8

rand()

返回 0 到 1 的随机数

select rand() -- >0.89279320

round(x)

对 x 四舍五入

select round(1.23456)  --> 1

sign(x)

返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1

select sign(-10) --> (-1)

sqrt(x)

返回 x 的平方根

25 的平方根:
select sqrt (25) --> 5

sum(expression)

返回指定字段的总和

计算 orderdetails 表中字段 quantity 的总和:select sum (quantity) as totalitemsordered from orderdetails;

truncate(x,y)

返回数值 x 保留到小数点后 y 位的值(与 round 最大的区别是不会进行四舍五入

select truncate(1.23456,3) --> 1.234

这里是常用的数字函数,最常用的就是标红的这三个求余数(mod),四舍五入(round),对浮点数保留多少位小数(truncate)

(三) 日期函数

在MySQL中可以直接使用字符串表示日期,但是要求字符串的日期格式必须要是:
‘YYYY-MM-DD HH:MI:SS’
'2025-3-31 10:10:24'  
或者
‘YYYY/MM/DD HH:MI:SS’
'2025/3/31 10:10:24'

函数名

描述

例子🌰

curdate ()

返回当前日期

select curdate(); -> 2025-03-23

curtime ()

返回当前时间

select curtime ();
--> 22:50:00

current_date ()

返回当前日期

select current_date(); -> 2025-03-23

current_time ()

返回当前时间

select current_time ();
-> 当前具体时间(会随执行时间而变)

date ()

日期日期时间表达式提取日期值

select date(now());
-> 2025-03-23

datediff (d1,d2)

计算日期 d1 -> d2 之间相隔的天数

select datediff ('2025-03-23', '2025-03-01')
-> 22

day (d)

返回日期值 d 的日期部分

select day(curdate());
-> 23

dayname (d)

返回日期 d 是星期几(英文名称),如 monday,tuesday

select dayname(curdate());
-> Sunday

dayofmonth (d)

计算日期 d 是本月的第几天

select dayofmonth('2025-03-23');
-> 23

dayofweek (d)

日期 d 是星期几,1 星期日,2 星期一,以此类推

select dayofweek('2025-03-23');
-> 1

dayofyear (d)

计算日期 d 是本年的第几天

select dayofyear ('2025-03-23');
-> 82

hour (t)

返回 t 中的小时值

select hour ('22:50:00');
-> 22

last_day (d)

返回给定日期的那一月份的最后一天

select last_day('2025-03-23');
-> 2025-03-31

monthname (d)

返回日期当中的月份名称(英文),如 november

select monthname('2025-03-23');
-> March

month (d)

返回日期 d 中的月份值,1 到 12

select month(curdate());
-> 3

now ()

返回当前日期和时间

select now ();
-> 2025-03-23 

second (t)

返回 t 中的秒钟值

select second ('22:50:23');
-> 23

sysdate ()

返回当前日期和时间

select sysdate ();
-> 2025-03-23 

timediff (time1, time2)

计算时间差值

select timediff('22:50:23', '20:30:10');
->  02:20:13

week (d)

计算日期 d 是本年的第几个星期,范围是 0 到 53

select week ('2025-03-23');
-> 12

weekday (d)

日期 d 是星期几
0 表示星期一,1 表示星期二

select weekday('2025-03-23');
-> 6 (周一)

weekofyear (d)

计算日期 d 是本年的第几个星期
范围是 0 到 53

select weekofyear ('2025-03-23');
-> 12

year (d)

返回年份

select year('2025-03-23');
-> 2025

这里提供了常见的日期函数

(四) 转换函数

转换函数分为隐式和显式两种

1. 隐式转换

隐式数据类型转换就是MySQL服务器可以自动地进行类型转换。
如:可以将标准格式的字串日期自动转换为日期类型

当日期写成该日期类型时:
‘YYYY-MM-DD HH:MI:SS’
‘YYYY/MM/DD HH:MI:SS’;
系统就会将这个字符串自动转换成日期

2. 显示数据类型转换 可以放什么图

函数名

例子🌰

date_format (date, format)
(将日期转换成字符串)

select date_format ( now (), '% Y年% m月% d % H时% i分% s' );
-> 2025年03月31 14时30分15

str_to_date ( str, format )
(将字符串转换成日期

select str_to_date('2025年03月23', '%Y年%m月%d');
-> 2025-03-23  

常用格式

(五) 通用函数

通用函数也是很常用的,能够解决很多问题,例如相乘时,如果有null空值,那么就会出错
因为空值null不是一个值

函数名

描述

例子🌰

if(expr,v1,v2)

如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2

select if (1> 0,' 正确 ',' 错误 ')
-> 正确

ifnull(v1, v2)

如果 v1 的值不为 null,则返回 v1,否则返回 v2(返回第一个不为空的值

select ifnull(null,'hello word')
--> hello word

isnull(expression)

判断表达式是否为 null
是空返回1

select isnull(null); 
--> 1

nullif(expr1, expr2)

比较两个参数是否相同,如果参数 expr1 与 expr2 相等 返回 null
否则返回 expr1(第一个值)

select nullif(25, 25);   
--> null

coalesce( expr1,  expr2,  ...., expr_n )

返回参数中的第一个非空表达式(从左向右)

select coalesce(null, null, null, 'Yibei', null, 'Mnihao'

'); -> Yibei

case expression
when value1 then result1
when value2 then result2 ... when valueN then resultN else default_result
end
case 开启 ,end 结束。它会依次计算 when 子句的条件,首个为 true 的条件对应结果会被返回,后续 when 不再计算。若所有条件都为 false,则返回 else 结果(无 else 则返回 null

CASE表达式有两种方式

第一种,搜索 CASE 表达式

--  CASE 表达式
select 
    case
        when score >= 90 then '优秀'
        when score >= 80 then '良好'
        when score >= 60 then '及格'
        else '不及格'
    -- 将结果命名为grade
    end as grade
from students;

第二种,普通 CASE 表达式

-- 普通CASE
-- 类似 java中的switch语句
-- 给一个值,来匹配
select  
    case 
        floor(score / 10)
        when 9 then '优秀'
        when 8 then '良好'
        when 7 then '良好'
        when 6 then '及格'
        else '不及格'
    -- 这里的as grade 是将这一列的列名设置为grade
    end as grade
from 
    students;  

三. 聚合函数(多行函数)

聚合函数就是对一组数据进行查询,返回一个结果
例如:求和等等
所以聚合函数的类型有:
AVG 平均值,COUNT 计数,MAX 最大值,MIN 最小值,SUM 合计

函数功能
count统计数量
max最大值
min

最小值

avg平均值
sum求和

-- 对学生成绩求平均分
select avg(score) as student_score from students;

-- 统计学生记录
select count(*) as student_count from students;

-- 求最大成绩
select max(score) as max_score from students;

-- 求最小成绩
select min(score) as min_score from students;

-- 计算学生成绩的总和
select sum(score) as total_score from students;

因为聚合函数是对一组数据进行查询的,所以要用到分组
我之前一篇文章里写过分组,这里就不再赘述了
传送门:分组查询

四. 总结

希望本文对你有所帮助😊
后续会推出专门函数练习的文章,敬请期待~~~

评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艺杯羹

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值