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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: 本文介绍了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。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
10月前
|
SQL 关系型数据库 MySQL
MySQL 常用函数
我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。
636 2
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
【YashanDB知识库】MySQL field 函数的改写方法
|
SQL 关系型数据库 MySQL
Mysql-常用函数及其用法总结
以上列举了MySQL中一些常用的函数及其用法。这些函数在日常的数据库操作中非常实用,能够简化数据查询和处理过程,提高开发效率。掌握这些函数的使用方法,可以更高效地处理和分析数据。
394 19
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
本文来自YashanDB官网,介绍将MySQL的FIELD函数改写到YashanDB的方法。MySQL中,FIELD函数用于自定义排序;而在YashanDB中,可使用DECODE或CASE语句实现类似功能。示例展示对表`t1`按指定顺序排序的过程,提供两种改写方式,结果均符合预期。
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
350 8
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
360 7
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
299 3
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
212 1
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
485 158

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多