MySQL数据库————函数

1.字符串函数

字符串函数有很多,常见的有:

函数功能
contact(s1,s2,…sn)字符串拼接函数
lower(str)将字符串全部转为小写
upper(str)将字符串str全部转为大写
lpad(str,n,pad)左填充,用字符串pad的左边进行填充,达到n个字符串长度
rpad(str,n,pad)右填充,用字符串pad的右边进行填充,达到n个字符串长度
trim(str)去掉字符串头部和尾部的空格
substring(string,start,len)返回字符串str从start位置起的len个长度的字符串

演示:

select concat('hello',' world');
select lower('HELLO');
select upper('hello');
select lpad('01',5,'_');
select rpad('01',5,'_');
select trim(' hello world '); 
select substring('hello mysql',1,5);

在这里插入图片描述
在这里插入图片描述
案例:由于业务需求变更,企业员工的工号,统一为7位数,目前不足5位数的全部在前面补0。比如: 1号员
工的工号应该为00001。

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

在这里插入图片描述
原图:
在这里插入图片描述
改变后:
在这里插入图片描述

2 数值函数

常见的数值函数如下:

函数功能
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(5,9);
select rand();
select round(5.56,1);

在这里插入图片描述
案例:
通过数据库的函数,生成一个六位数的随机验证码。
思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0。

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 expr type返回一个日期/时间值加上一个时间间隔expr后的时间值
datediff(date1,date2)起始时间date1,结束时间date2之间的天数
select curdate();
select curtime();
select now();
select year(now());
select month(now());
select day(now());
select day_add(now(),interval 70 day);
select datediff('2021-10-01', '2023-12-01'));

在这里插入图片描述
在这里插入图片描述
案例:
查询所有员工的入职天数,并根据入职天数倒序排序。
思路: 入职天数,就是通过当前日期 - 入职日期,所以需要使用datediff函数来完成。

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

在这里插入图片描述
4 流程函数
流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。

函数功能
if(values,t,f)如果value为true,则返回t,否则返回f
ifnull(values1,values2)如果value1不为空,返回value1,否则返回value2
case when [ val1 ] then [res1] else [ default ] end如果val1为true,返回res1,否则返回default默认值
case expr when vall then res1 else default end如果expr的值等于val1,返回res1,否则返回default默认值
select if(false,'ok','error');
select ifnull('ok','error');
select ifnull('','error');
select ifnull(null,'error');





//C. case when then else end
//需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 ,其他 ----> 二线城市)
select name,(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) 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);

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;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值