• MYSQL之函数


    目录

    一. 函数定义

    一、常用函数

       1.日期函数

       2.字符串函数

       3.数字函数

    二、条件判断函数

    三、聚合函数(SUM/COUNT/AVG/MAX/MIN)

    四、合并(union)


    一. 函数定义


       1.类似Java定义方法
       2.可以带参数
       3.必须有返回值(一行一列) ,重点:java方法可以没有返回值,数据库函数必须要有返回值
          select max(score) from sc;
       4.函数可以嵌套到sql语句中
         注:存储过程则不可以
       5.函数可嵌套调用  round(avg)

    一、常用函数

       1.日期函数

       1) NOW():获取当前日期和时间

    select now();


       2) DAY():获取日期中的天

    select day(now());


       3) MONTH():获取日期中的月

    select month(now())


       4) YEAR():获取日期中的年

    select year(now())


       5) 日期转换函数DATE_FORMAT()/STR_TO_DATE()
       
       DATE_FORMAT():将日期转换成字符串

    select now(),DATE_FORMAT(now(),'%Y年%m月%d日')


       STR_TO_DATE():将字符串转换成日期

    select STR_TO_DATE('2022-07-05','%Y-%m-%d');

       查询各学生的年龄,只按年份来算

    select s.*,year(now())-year(s.sage) from t_student s;


       按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一

    1. select s.*,year(now())-year(s.sage),if(month(now())<month(s.sage),-1,0)
    2. from t_student s;


       查询本月过生日的学生

    select * from t_student where month(now())=month(sage);


      查询下月过生日的学生

    1. 第一种
    2. select * from t_student where month(now())+1=month(sage)第一种

     date_add(NOW(), interval 1 MONTH):当前时间+1年、月、日

    1. 第二种
    2. select * from t_student where month(DATE_ADD(now(),interval 1 month))=month(sage);


       2.字符串函数

       1) UPPER()/LOWER():大小写互转

    1. select upper('cxy')
    2. select lower('CXY')

    2) REPLACE():搜索并替换字符串中的子字符串

    uuid:随机函数

    select uuid(),replace(uuid(),'-','');

    3) SUBSTRING():从具有特定长度的位置开始的最一个子字符串

    1. select substring('wwwcom',1,5)
    2. select substring('wwwcom',5)

    4) TRIM():去除前后空格
    5) LENGTH():获取字符串长度

    1. -- 去空格、长度
    2. select length(' abcdefg '),length(trim(' abcdefg '))

     6) CONCAT():合并字符串函数,返回结果为连接参数产生的字符串,参数可以是一个或多个

    3.数字函数


    1)FLOOR:向下取整
     2)CEIL: 向上取整
    3)ROUND:四舍五入

     select FLOOR(-3.14), CEIL(-3.14),FLOOR(3.14), CEIL(3.14);

    结果: 

     

     

    二、条件判断函数

       1)IF(expr,v1,v2)
       如果expr是TRUE则返回v1,否则返回v2

    行列转换

    需求:每一个学生的语数外分数

    第一种:

    1. SELECT
    2. s.sid,
    3. s.sname,
    4. sum(IF(sc.cid = '01', sc.score, 0 )) 语文,
    5. sum(IF(sc.cid = '02', sc.score, 0 )) 数学,
    6. sum(IF(sc.cid = '03', sc.score, 0 )) 英语
    7. FROM
    8. t_student s
    9. LEFT JOIN t_score sc ON s.sid = sc.sid
    10. GROUP BY s.sid,s.sname

       第二种:

    1. select
    2. s.sid,s.sname
    3. SUM(case when sc.cid='01' then sc.score end) 语文
    4. SUM(case when sc.cid='01' then sc.score end) 数学
    5. SUM(case when sc.cid='01' then sc.score end) 英语
    6. from
    7. t_student s
    8. LEFT JOIN t_score sc
    9. on s.sid=sc.sid
    10. GROUP BY s.sid,s.sname

    运行结果:

     2)IFNULL(v1,v2)

     如果v1不为NULL,则返回v1,否则返回v2

    3)CASE expr WHEN v1 THEN r1 [WHEN v2 THEN v2] [ELSE rn] END
    如果expr等于某个vn,则返回对应位置THEN后面的结果,如果与所有值都不想等,则返回ELSE后面的rn
         

    三、聚合函数(SUM/COUNT/AVG/MAX/MIN)

       1) SUM():求和。常与GROUP BY一起使用,也可单独使用
       2) AVG():求平均值。常与GROUP BY一起使用,也可单独使用
       3) MAX():求最大值。常与GROUP BY一起使用,也可单独使用
       4) MIN():求最小值。常与GROUP BY一起使用,也可单独使用
       5) COUNT():统计记录的条数。常与GROUP BY一起使用,也可单独使用

    四、合并(union)

       1) UNION:将所有的查询结果合并到一起,然后去除掉相同的记录

    1. select 1,'cxy',18
    2. union
    3. select 2,'aa',19
    4. union
    5. select 2,'aa',19

    运行结果:

     

     

     2) UNION ALL:将所有的查询结果合并到一起,不会去除掉相同的记录

    1. select 1,'cxy',18
    2. union all
    3. select 2,'aa',19
    4. union all
    5. select 2,'aa',19

       运行结果:

     

     前提条件:结果集列数个数相同,列的类型还要相同或是兼容
           使用场景:在项目统计报表模块,用来合并数据

       

  • 相关阅读:
    面试前必须了解的7 种架构设计模式(译文)
    vue重新进入页面,js不加载
    RabbitMQ+SpringBoot企业版队列实战------【华为云版】
    Java 开发必备:腾讯架构师解析 Java 并发编程从入门到精通
    uniapp 使用和引入 thorui
    WMS仓储管理系统如何保障仓库的安全性
    Java小树的参天成长【内部类,成员内部类,静态内部类,局部内部类,匿名内部类】
    图论2023.11.12
    AJAX|AJAX基本用法
    【数据结构与算法】用队列实现栈&&用栈实现队列&&设计循环队列
  • 原文地址:https://blog.csdn.net/m0_62528678/article/details/125616333