• 【MySQL数据库】(三)函数


    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
    📚专栏地址:https://blog.csdn.net/Newin2020/article/details/127933422
    📝视频地址:黑马程序员 MySQL数据库入门到精通
    📣专栏定位:这个专栏我将会整理 B 站黑马程序员的 MySQL 入门课程的笔记,大家可以根据笔记辅助听课~
    ❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

    三、函数

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

    1. 字符串函数

    MySQL 中内置了很多字符串函数,常用的几个如下:

    函数功能
    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 个长度的字符串(从1开始)
    SELECT 函数(参数);
    
    • 1

    案例:

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

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

    2. 数值函数

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

    案例:

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

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

    3. 日期函数

    常见的日期函数如下:

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

    案例:

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

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

    4. 流程函数

    流程函数也是很常用的函数,可以在 SQL 语句中实现条件筛选,从而提高语句的效率。

    函数功能
    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 默认值

    案例:

    -- 1.查询emp表的员工姓名和工作地址(北京/上海 ----> 一线城市,其他 ----> 二线城市)
    select
    	name,
    	( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end ) as '工作地址'
    from emp;
    
    -- 2.统计班级各个学员的成绩,展示的规则如下:
    -- >= 85,展示优秀
    -- >= 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,85,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 ) '数学',
    	( case when english >= 85 then '优秀' when english >= 60 then '及格' else '不及格' end ) '英语',
    	( case when chinese >= 85 then '优秀' when chinese >= 60 then '及格' else '不及格' end ) '语文'
    from score;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    从零开始学习 Java:简单易懂的入门指南之Map集合(二十三)
    Go语言各种扩容机制(防止混淆)
    Konva基本处理流程和相关架构设计
    2022年下半年软考报名时间汇总,最新版!
    Redis创始人开源最小聊天服务器,仅200行代码,几天功夫已获2.8K Star!
    初识设计模式 - 建造者模式
    不生成DOM的非主流Blazor UI开源啦!
    七天入门node.js(01)
    射频微波芯片设计1:岗位以及开发工具详解
    shell三剑客-----sed命令
  • 原文地址:https://blog.csdn.net/Newin2020/article/details/126530596