【MySQL基础篇】盘点MySQL常用四大类函数

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: 本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。

MySQL基础篇-函数


学习目标

  • 字符串函数
  • 数值函数
  • 日期函数
  • 流程函数

函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在MySQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。 那么,函数到底在哪儿使用呢?

我们先来看两个场景:

MySQL中的函数主要分为以下四类: 字符串函数数值函数日期函数流程函数


一、字符串函数

MySQL中内置了很多字符串函数,常用的几个如下:

函数

功能

CONCAT(s1, s2, …, sn)

字符串拼接,将s1, s2, …, sn拼接成一个字符串

LOWER(str)

将字符串全部转为小写

UPPER(str)

将字符串全部转为大写

LPAD(str, n, pad)

左填充,用字符串pad对str的左边进行填充,达到n个字符串长度

RPAD(str, n, pad)

右填充,用字符串pad对str的右边进行填充,达到n个字符串长度

TRIM(str)

去掉字符串头部和尾部的空格

SUBSTRING(str, start, len)

返回从字符串str从start位置起的len个长度的字符串

REPLACE(column, source, replace)

替换字符串

使用示例:

A. concat : 字符串拼接

select concat('Hello', ' MySQL');

B. lower : 全部转小写

select lower('Hello');

C. upper : 全部转大写

select upper('Hello');

D. lpad : 左填充

select lpad('01', 5, '-');

E. rpad : 右填充

select rpad('01', 5, '-');

F. trim : 去除空格

select trim(' Hello  MySQL ');

G. substring : 截取子字符串

-- 注意起始截取索引从1开始
select substring('Hello MySQL', 1, 5);

H. replace : 替换字符串

select replace('aaa bbb a ccc', 'a', '666,');

案例:

由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员工的工号应该为00001。

-- 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员工的工号应该为00001。
update emp set workno = lpad(workno, 5, '0');

处理完毕后, 具体的数据为:


二、数值函数

常见的数值函数如下:

函数

功能

CEIL(x)

向上取整

FLOOR(x)

向下取整

MOD(x, y)

返回x/y的模

RAND()

返回0~1内的随机数

ROUND(x, y)

求参数x的四舍五入值,保留y位小数

演示如下:

A. ceil:向上取整

select ceil(1.1);

B. floor:向下取整

select floor(1.9);

C. mod:取模

select mod(6, 4);
-- select 6 mod 4;

D. rand:获取随机数

select rand();  -- 随机生成0~1之间的一个小数

E. round:四舍五入

select round(2.49); -- 不写参数默认四舍五入到整数
select round(2.345, 2); -- round(num, 四舍五入到的位数)

案例:

通过数据库的函数,生成一个六位数的随机验证码。

思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0

-- 随机生成一个6位数字的验证码
select lpad(round(rand() * 1000000, 0), 6, '0');
-- 注意如果不足6位,需要在前面或后面补齐,如0.012345
select round(0.012345 * 1000000);   -- 12345
select substring(concat(rand()), 3, 6);
select substring(rand(), 3, 6);

三、日期函数

常见的日期函数如下:

函数

功能

CURDATE()

返回当前日期

CURTIME()

返回当前时间

NOW()

返回当前日期和时间

YEAR(date)

获取指定date的年份

MONTH(date)

获取指定date的月份

DAY(date)

获取指定date的日期

DATE_ADD(date, INTERVAL expr type)

返回一个日期/时间值加上一个时间间隔expr后的时间值

DATEDIFF(date1, date2)

返回起始时间date1和结束时间date2之间的天数

演示如下:

A. curdate:当前日期

-- 当前日期 2023-01-12
select curdate();
select current_date;

B. curtime:当前时间

-- 当前时间 23:16:09
select curtime();
select current_time;

C. now:当前日期和时间

-- 当前日期和时间
select now();
# 扩展:
-- timestamp类型 2023-01-12 23:13:49
select current_timestamp;
select localtimestamp;
-- 时间戳
select unix_timestamp();

D. YEAR , MONTH , DAY:当前年、月、日

select year(now()) '年', month(now()) '月', day(now()) '日', monthname(now()) '月份名称', dayname(now()) '星期名称';

E. date_add:增加指定类型的时间间隔

-- 增加/减少指定类型的时间间隔
select date_add(now(), INTERVAL 48 HOUR), date_sub(curdate(), INTERVAL 2 DAY);

F. datediff:获取两个日期相差的天数/时间

-- 获取两个日期相差的天数/时间 注意都是前减后date1-date2
select datediff('2023-01-12', '2022-12-12'), timediff('16:30:00', '15:00:01');

案例:

查询所有员工的入职天数,并根据入职天数倒序排序。

思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用datediff函数来完成。

-- 案例:查询所有员工的入职天数,并根据入职天数倒序排序。
select name '员工姓名', datediff(curdate(), entrydate) as '入职天数' from emp order by 入职天数 desc;

四、流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。

函数

功能

IF(value, t, f)

如果value为true,则返回t,否则返回f

IFNULL(value1, value2)

如果value1不为空,返回value1,否则返回value2

CASE WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END

如果val1为true,返回res1,… 否则返回default默认值(条件判断三元运算符)

CASE [ expr ] WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END

如果expr的值等于val1,返回res1,… 否则返回default默认值(等值判断三元运算符)

演示如下:

A. if

select if(false, 'OK', 'Error');

B. ifnull

select ifnull('OK', 'Default');
select ifnull('', 'Default');
select ifnull(null, 'Default');

C. case when then else end

需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)

-- 类似与switch...case
-- 思路1 case 字段 [when 字段值val1 then 字段值为val1时返回的值]... else 字段值为其他的值时返回的值 end
select
    name,
    workaddress,
    (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;
-- 类似于if... else if...else
-- 思路2 case [when 条件表达式1 then 条件表达式1为true返回的值]... else 所有条件表达式都为false返回的值 end
select
    name,
    workaddress,
    case when workaddress in ('北京', '上海') then '一线城市' else '二线城市' end as '工作地址'
from emp;
-- 思路3 IF:
select name, if(workaddress = '北京' or workaddress = '上海', '一线城市', '二线城市') as '工作地址' from emp;
select name, if(workaddress in ('北京', '上海'), '一线城市', '二线城市') as '工作地址' from emp;

案例:

create table score(
    id int comment 'ID',
    name varchar(20) comment '姓名',
    math int comment '数学',
    english int comment '英语',
    chinese int comment '语文'
) comment '学员成绩表';
insert into score(id, name, math, english, chinese) VALUES (1, 'Tom', 67, 88, 95), (2, 'Rose' , 23, 66, 90),(3, 'Jack', 56, 98, 76);

具体的SQL语句如下:

-- 案例:统计班级各个学员的成绩,展示的规则如下:
-- >= 85 展示优秀
-- >= 60 展示及格
-- 否则,展示不及格
select id,
       name,
       case when math >= 85 then '优秀' when math >= 60 then '及格' else '不及格' end as '数学',
       case when english >= 85 then '优秀' when english >= 60 then '及格' else '不及格' end as '英语',
       case when chinese >= 85 then '优秀' when chinese >= 60 then '及格' else '不及格' end as '语文'
from score;


总结

image.png



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
60 7
|
21天前
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
56 8
|
22天前
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
26天前
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
30 3
|
28天前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
31 1
|
1月前
|
关系型数据库 MySQL Serverless
MySQL函数
最常用的MySQL函数,包括聚合函数,字符串函数,日期时间函数,控制流函数等
37 1
|
1月前
|
SQL NoSQL 关系型数据库
|
2月前
|
关系型数据库 MySQL 数据库
mysql中tonumber函数使用要注意什么
在处理这类转换操作时,考虑周全,利用提供的高性能云服务器资源,可以进一步提升数据库处理效率,确保数据操作的稳定性和安全性,尤其是在处理大量数据转换和运算密集型应用时。
131 0
|
2月前
|
关系型数据库 MySQL 数据处理
企业级应用 mysql 日期函数变量,干货已整理
本文详细介绍了如何在MySQL8.0中使用DATE_FORMAT函数进行日期格式的转换,包括当日、昨日及不同时间段的数据获取,并提供了实际的ETL应用场景和注意事项,有助于提升数据处理的灵活性和一致性。
50 0
|
4天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
18 3

相关产品

  • 云数据库 RDS MySQL 版