• MySQL - 函数


    1 什么是函数?

    要想实现上面的这些效果,就得借助于MySQL当中的内置函数

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

    MySQL当中内置了很多的函数,根据其操作的数据类型,分为以下四类:

    • 字符串函数 
    • 数值函数
    • 日期函数
    • 流程控制函数

    1.1 字符串函数

    函数功能
    char_length(s)返回字符串的字符长度
    concat(s1,s2,... sn)字符串拼接,将s1,s2,... sn拼接成一个字符串
    concat_ws(sep,s1,s2,... sn)字符串拼接,将s1,s2,... sn拼接成一个字符串,中间使用sep分隔
    left(s,len)返回字符串左侧的len个长度的字符串
    right(s,len)返回字符串右侧的len个长度的字符串
    substring(str,start,len)返回字符串str从start位置起的len个长度的字符串[注意:start从1开始]
    1. -- MySQL函数:
    2. -- 字符串函数
    3. -- 1. char_length(s) 返回字符串的字符长度
    4. select name,char_length(name) from tb_emp;
    5. -- 2. concat(s1,s2,...sn) 字符串拼接,将s1,s2,...sn拼接成一个字符串
    6. select concat(id,'-',name) from tb_emp;
    7. -- 3. concat_ws(sep,s1,s2,...sn) 字符串拼接,将s1,s2,...sn拼接成一个字符串,中间使用sep分隔
    8. select concat_ws(' - ',username,name) from tb_emp;
    9. -- 4. left(s,len) 返回字符串左侧的len个长度的字符串
    10. select left(username,5) from tb_emp;
    11. -- 5. right(s,len) 返回字符串右侧的len个长度的字符串
    12. select right(username,5) from tb_emp;
    13. -- 6. substring(str,start,len) 返回字符串str从start位置起的len个长度的字符串
    14. -- 比如:我想查询每一个员工的姓氏
    15. select substring(name,1,1) from tb_emp;

    1.2 数值函数  

    函数功能
    ceil(x)向上取整
    floor(x)向下取整
    rand()返回0~1内的随机数
    round(x,y)求参数x的四舍五入的值,保留y位小数
    1. -- 数值函数
    2. -- select后面如果没有指定任何的from的话,代表我们不需要从表当中来查询
    3. -- 1. ceil(x) 向上取整
    4. select ceil(2.1); -- 3
    5. -- 2. floor(x) 向下取整
    6. select floor(2.9); -- 2
    7. -- 3. rand() 返回0~1内的随机数
    8. select rand(); -- 0.632749031887156
    9. -- 4. round(x,y) 求参数x的四舍五入的值,保留y位小数
    10. select round(2.453,2); -- 2.45

    1.3 日期函数 

    日期时间类型的函数 

    函数功能
    now()返回当前日期和时间
    curdate()返回当前日期
    curtime()返回当前时间
    year(date)获取指定date日期的年份
    month(date)获取指定date的月份
    day(date)获取指定date的日期
    datediff(date1,date2)返回起始时间date1和结束时间date2之间的天数
    date_format(date,format)日期时间格式化
    1. -- 日期时间类型的函数
    2. -- 1. now() 返回当前日期和时间
    3. select now(); -- 2023-09-01 19:02:40
    4. -- 2. curdate() 返回当前日期
    5. select curdate(); -- 2023-09-01
    6. -- 3. curtime() 返回当前时间
    7. select curtime(); -- 19:02:59
    8. -- 4. year(date) 获取指定date日期的年份
    9. select year('2023-02-05 00:09:45'); -- 2023
    10. -- 5. month(date) 获取指定date的月份
    11. select month('2023-02-05 00:09:45'); -- 2
    12. -- 6. day(date) 获取指定date的日期
    13. select day('2023-02-05 00:09:45'); -- 5
    14. -- 7. datediff(date1,date2) 返回起始时间date1和结束时间date2之间的天数
    15. select datediff('2002-07-08 00:09:45','2023-08-14 00:09:45'); -- 7707
    16. -- 8. date_format(date,format) 日期时间格式化
    17. -- format函数多的一批,鼠标往上一悬浮,会自动提示
    18. select date_format('2002-07-08 00:09:45','%Y'); -- 2022
    19. -- 需求:获取2015年入职的员工
    20. select * from tb_emp where year(entrydate) = '2015';

    1.4 流程控制函数(最重要) 

    函数功能
    if(value,t,f)如果条件表达式value为true,则返回t,否则返回f
    ifnull(value1,value2)如果value1不为空,返回value1,否则返回value2
    case when cond1 then res1 when cond2 then res2... [else result] end如果cond1为true,返回res1,... 否则返回result默认值
    case expr when val1 then res1 ... [else result] end如果表达式expr的值等于val1,返回res1,... 否则返回result默认值,最后语法结束来一个end
    1. -- 流程控制函数
    2. -- 1. if(value,t,f) 如果条件表达式value为true,则返回t,否则返回f
    3. -- 要求:按照性别进行分组,如果gender=1,显示男性员工;如果gender=2,显示女性员工
    4. select if(gender = 1, '男性员工', '女性员工') as 性别, count(1) as 总数
    5. from tb_emp
    6. group by gender;
    7. -- 2. ifnull(value1,value2) 如果value1不为空,返回value1;否则返回value2
    8. -- 查询员工的姓名及职位,如果员工没有职位,展示'未分配职位'
    9. select name as '姓名', ifnull(job, '未分配职位') as '职位'
    10. from tb_emp;
    11. -- 3. case when condition1 then res1 when cond2 then res2...else result end
    12. -- gender性别转换:1转化为男性员工,2转化为女性员工
    13. select name, (case when gender = 1 then '男性员工' when gender = 2 then '女性员工' end) as '性别'
    14. from tb_emp;
    15. -- 4. case expr when val1 then res1 when val2 then res2 ... else result end
    16. -- job职位转换,说明: 1 班主任 ,2 讲师, 3 学工主管, 4 教研主管
    17. select name as '姓名',
    18. (case job
    19. when 1 then '班主任'
    20. when 2 then '讲师'
    21. when 3 then '学工主管'
    22. when 4 then '教研主管'
    23. else
    24. '@失业@' end) as '职位'
    25. from tb_emp;

    2. MySQL函数-案例

    1. -- MySQL函数-案例
    2. -- 计算每个员工的入职天数 datediff(date1,date2) 返回起始时间date1和结束时间date2之间的天数
    3. select name as 员工姓名, datediff(now(), entrydate) as '入职天数' from tb_emp;

    1. -- 19.查询出来不是班主任的员工
    2. select * from tb_emp where job != 1 or job is null;
    3. -- 20.查询出入职人数最多的月份
    4. select month(entrydate) as '月份', count(*) as '总数'
    5. from tb_emp
    6. group by month(entrydate)
    7. order by count(*) desc
    8. limit 1;
    9. -- 21.查询出入职人数最多的年份
    10. select year(entrydate) as '年份', count(*) as '总数'
    11. from tb_emp
    12. group by year(entrydate)
    13. order by count(*) desc
    14. limit 1;

     

  • 相关阅读:
    Javaweb之HTML,CSS的详细解析
    世界百强企业架构师亲授:SpringBoot实战开发与最佳实践课程-Java
    YOLOv4: Optimal Speed and Accuracy of Object Detection(2020.4)
    树与二叉树(考研版)
    P1903 [国家集训队] 数颜色 / 维护队列
    第二章网页前端基础与HTTP协议
    钉钉小程序入门3—钉钉扫码登录PC端网站
    深度学习损失函数
    业务组件化 —— 创建、发布、使用业务组件
    [c语言]小课堂 day1
  • 原文地址:https://blog.csdn.net/weixin_53622554/article/details/132626407