MySQL数据库总结 之 函数命令总结

MySQL命令语句中的函数包含四种:

  1. 字符串函数
  2. 数值函数
  3. 日期函数
  4. 流程函数 

前两篇关于MySQL的博客,地址如下:

MySQL数据库 && SQL语言命令总结 && 数据类型、运算符和聚合函数汇总_Flying Bulldog的博客-CSDN博客icon-default.png?t=N5K3https://blog.csdn.net/qq_54185421/article/details/131396183?spm=1001.2014.3001.5501从0到1 && 关于MySQL的数据库和表_Flying Bulldog的博客-CSDN博客icon-default.png?t=N5K3https://blog.csdn.net/qq_54185421/article/details/131429423?spm=1001.2014.3001.5501

目录

1 字符串函数

字符串函数—案例

2. 数值函数

数值函数—案例

3. 日期函数

日期函数—案例

4. 流程函数

流程函数—案例 


1 字符串函数

函数 功能
CONCAT(S1,S2,... ,Sn) 字符串拼接,将 S1,S2,... ,Sn 拼接成一个字符串
LOWER(str) 将字符串 str 全部转为小写
UPPER(str) 将字符串 str 全部转为大写
LPAD(str,n,pad) 左填充,用字符串 pad 对 str 的左边进行填充,达到n个字符串长度
RPAD(str,n,pad) 右填充,用字符串 pad 对 str 的右边进行填充,达到n个字符串长度
TRIM(str) 去掉字符串头部和尾部的空格
SUBSTRING(str,start,len) 返回字符串 str 的子字符串,即从start位置起的 len 个长度的字符串

字符串函数—案例

参考本人的另外一篇博客,即可拥有如下图所示的数据库表:

题目:由于业务需求变更,企业员工的工号统一为5位数,不足5位数的工号在前面补0。

思路:根据题目分析,假如员工的工号为 1,则利用函数 lpad 把工号转变成 00001 即可。

update emp set workno = lpad(workno, 5, '0');

 运行上述SQL命令,更新的具体数据如下图所示:

2. 数值函数

函数 功能
CELL(x) 向上取整
FLOOR(x) 向下取整
MOD(x,y) 返回 x / y 的模
RAND() 返回 0~1 的随机数
ROUND(x,y) 求参数 x 四舍五入的值,保留 y 位小数

数值函数—案例

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

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

select lpad(round(rand()*1000000,0),6,'0');

运行结果如下: 

3. 日期函数

函数 功能
CURDATE() 返回当前日期
CURTIME() 返回当前时间
NOW() 返回当前日期和时间
YEAR(date) 获取指定date的年份
MONTH(date) 获取指定date的月份
DAY(date) 获取指定date的日期
DATE_ADD(date,INTERVAL exprtype) 返回一个日期 / 时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1,date2) 返回起始时间date1和结束时间date2之间的天数

日期函数—案例

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

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

select name, datediff(curdate(), entrydate) as 'entrydays' from emp order by entrydays desc;

 运行上述语句,结果如下图所示:

4. 流程函数

函数 功能
IF(value,t,f)

如果 value 为 true,则返回 t,

否则返回 f

IFNULL(value1,value2)

如果 value1 不为空,返回 value1,

否则返回 value2

CASE WHEN [ vall ] THEN [res1] ...

ELSE [default] END

如果 vall 为 true,返回 res1,...

否则返回 default 默认值

CASE [expr] WHEN [vall] THEN [res1] ...

ELSE [default] END

如果 expr 的值等于 vall,返回 res1,...

否则返回 default 默认值

流程函数—案例 

题目:统计学生的成绩等级。

思路:利用流程函数 CASE WHEN [ vall ] THEN [res1] ... ELSE [default] END 来解决问题。

(1)创建学生成绩数据表,命名为 score

-- 创建表score,结构如下:
create table score(
	id int comment 'ID',
	name varchar(20) comment '姓名',
	math int comment '数学',
	english int comment '英语',
	chinese int comment '语文'
) comment '学员成绩表';

(2)插入数据到数据表 score 中

-- 插入数据到表score中
insert into score(id, name, math, english, chinese) VALUES (1, 'Tom', 67, 88, 95), (2, 'Rose' , 23, 66, 90),(3, 'Jack', 56, 98, 76);

(3)统计学生的成绩等级

select id, name, 
(case when math >= 85 then '优秀' when math >=60 then '及格' else '不及格' end )  '数学', 
(case when english >= 85 then '优秀' when english >=60 then '及格' else '不及格' end ) '英语',
(case when chinese >= 85 then '优秀' when chinese >=60 then '及格' else '不及格' end ) '语文' 
from score;

运行结果如下:

>>> 如有疑问,欢迎评论区一起探讨。

猜你喜欢

转载自blog.csdn.net/qq_54185421/article/details/131462309