我爱MySQL系列——函数

 一、什么是函数  select 函数(参数)

 函数是指一段可以直接被另一段程序调用的程序或代码

1、1字符串函数     

--concat
select concot('hello','word');  #输出  helloword

--lower
select lower('Hello');   #输出  hello 

--upper
select upper('Hello');   #输出 HELLO

--lpad
select lpad('01',5,'-');   #输出 ---01   

--rpad
select rpad('01',5,'-');  #输出01---

--trim
select trim("  hello   word  ");    #输出hello  word   (前面和后面的空格不在了)

--substring
select substring('hello word',1,5);   #输出hello




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

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

1、2 数值函数

-- ceil
select ceil(1.2);    2  向上取整

--floor
select ceil(1.9);    1  向下取整

--mod
select mod(5,4);     1   求模

--rand
select rand();        0-1之间的随机数

--round
select round(2.345,2);   四舍五入 保留两位   2.35


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

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

#rand随机生成0-1的小数 乘以1000000就成为整数  用round 保留整数位 但是呢因为生成的是0-1的小数  会存在0.00156656乘以1000000后保留整数是 1566 这个时候只有四位  所以用一个左填充。如果没有六位数 就在左边填充0 

1.3 日期函数 

--curdate() 当前日期
select  curdate();  2024-4-25

--curtime() 当前时间
select curtime();  15:36:23

--now() 当前时间和日期
select now();   2024-4-25 15:36:23

--year(date) 指定date的年份
select yaer(now()); 2024

--month(date) 指定date的月份
select month(now());  4
 
--day(date)  指定date的日期
select day(now());   25

--date_add()  返回一个日期/时间值加上一个时间间隔expr后的时间值
select date_add(now(),interval 70 day);   2024-7-4 15:38:23
select date_add(now(),interval 70 month);   往后推70个月
select date_add(now(),interval 70 year);   往后推70年

--datediff(date1,date2) 返回date1和date2 之间的天数
select datediff('2021-12-01','2021-11-01');   30
select datediff('2021-11-01','2021-12-01');   -30


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

select name, datediff(curdate(),enterdate) as 'enterdays' from emp order by enterdays desc;

1.4 流程控制函数  

在SQL语句中实现条件筛选,从而提高语句的效率

--if(value,t,f)  value为true 返回t,否则返回f
select if(true,'ok','erro');    ok



--ifnull(value1,value2)   value不为空 返回value1,否则返回value2
select ifnull('ok,'dafault');   # ok
select ifnull('','dafault');    #  返回空白    这儿判断的是第一个值是不是null
select ifnull(null,'dafault');   # dafault



--case when  then else  end     如果val1为true 返回res1  否则返回default 默认值
# 查询emp表的员工姓名和工作地址(如果员工的地址是上海/北京 ---->  一线城市 ,其他 --->二线城市)
select 
    name,
    (case wordaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end ) as '工作地址'
from emp ;



--case [expr] when [val1] then [res1]……else [default] end    如果expr的值等于val1 返回res1 #  否则返回default 默认值




# 案例  统计班级各学员的成绩,展示的规则如下:
   #      >= 85,展示优秀    >= 60 展示及格   否则不及格
create table score(
    id  int,
    name varchar(20);
    math int,
    english int,
    chinses int
)comment "学员成绩表";



select 
    id,
    name,
    (case when math >= 85 then "优秀" when math >= 65 then "及格"  else "不及格" end) as "数学成绩",
    (case when english  >= 85 then "优秀" when english >= 65 then "及格"  else "不及格" end) as "英语成绩",,
    (case when chinses >= 85 then "优秀" when chinses >= 65 then "及格"  else "不及格" end) as "语文成绩",
from  score;
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v_w50

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值