品网站建设公司自己怎么弄网站
📢 前言
- 函数 是指一段可以直接被另一段程序调用的程序或代码。主要包括了以下4中类型的函数。
 
- 字符串函数
 - 数值函数
 - 日期函数
 - 流程函数
 

🎄 字符串函数
⭐ 常用函数
|    函数     | 功能 | 
|---|---|
|    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个长度的字符串 | 
⭐ 示例
☀ 简单操作
- 📢 值得注意的是trim是去除前后空格不能去掉中间的空格。
 - 📢 substring第一个位置是从1开始,而不是0。
 
select concat('Hello','Mysql');
select lower('Linux');
select upper('Linux');
select lpad('01',5,'-');
select rpad('01',5,'-');
select trim(' Hello  Mysql ');
select substring('Hello  Mysql ',1,5); 
☀ 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如: 1号员 工的工号应该为00001。
update test.emp set  workno = lpad(workno,5,'0'); 
🎄 数值函数
⭐ 常用函数
|    函数     | 功能 | 
|---|---|
| CEIL(x) | 向上取整 | 
| FLOOR(x) | 向下取整 | 
| MOD(x,y) | 返回x/y的模,也就是余数 | 
|    RAND()    | 返回0~1内的随机数 | 
|    ROUND(x,y)    | 求参数x的四舍五入的值,保留y位小数 | 
⭐ 示例
☀ 简单操作
- 📢 随机数可以×或者加上一个数让其保持在某个自定义的区间内。
 
select ceil(1.1);
select floor(1.1);
select mod(7,4);
select rand()*10;
select round(2.345,2); 
☀ 通过数据库的函数,生成一个六位数的随机验证码。
select lpad(round(rand()*1000000,0),6,'0');
select rpad(round(rand()*1000000,0),6,'0'); 
🎄 日期函数
⭐ 常用函数
|    函数     返回起始时间 date1  和 结束时间 date2 之间的天     数    | 功能 | 
|---|---|
|    CURDATE()     | 返回当前日期 | 
| CURTIME() | 返回当前时间 | 
| NOW() | 返回当前日期和时间 | 
| YEAR(date) | 获取指定date的年份 | 
| MONTH(date) | 获取指定date的月份 | 
| DAY(date) | 获取指定date的日期 | 
|    DATE_ADD(date, INTERVAL expr     type)    |    返回一个日期 / 时间值加上一个时间间隔 expr 后的     时间值    | 
| DATEDIFF(date1,date2) |    返回起始时间 date1  和 结束时间 date2 之间的天     数    | 
⭐ 示例
☀ 简单操作
- 📢date_add 后面增加的类型是时间单位,比如:year,month,day,week,hour,minute,second
 - 📢 并且这个时间可以是负数的。
 
select curdate();
select curtime();
select now();
select year(now());
select month(now());
select day(now());
select date_add(now(),interval 70 year);
select datediff('2024-10-10','2023-10-09'); 
☀ 查询所有员工的入职天数,并根据入职天数倒序排序。
select name, datediff(now(),entrydate) '天数'  from test.emp order by '天数' desc; 

🎄 流程函数
-  
📢 实现条件筛选,从而提高语句的效率。
 
⭐ 常用函数
|    函数     | 功能 | 
|---|---|
|    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 默认值    | 
⭐ 示例
☀ 简单操作
select if(false,'ok','error');
select ifnull('Ok','Default');
select ifnull(null,'Default'); 
☀ 查询emp表的员工姓名和工作地址
- 📢 对于展示要求,如果是北京/上海 ----> 一线城市 , 其他 ----> 二线城市
 
selectname,(case when (workaddress='北京' or workaddress = '上海') then '一线城市' else '二线城市' end) '工作地址'
from emp;
select name,if((workaddress='北京' or workaddress = '上海'),'一线城市','二线城市') '工作地址' from emp;
selectname,(case when workaddress='北京' then '一线城市' when workaddress = '上海' then '一线城市' else '二线城市' end) '工作地址'
from emp; 
☀ 统计各个学员的成绩
- 📢 >=85 优秀
 - 📢 >= 60 及格
 - 📢 <60 不及格
 - 首先准备数据
 
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);
 
-  
注意
 - 📢 这里有个要注意的,当大于等于85匹配,也就是被返回后,将不再参与后续的大于等于60的判断,所有不会影响后续条件的判定。
 
select 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; 



