内容概述

● 数字函数:比如把数据转换成货币格式,计算四舍五入等;

● 字符函数:处理字符串的,比如转换大小写,计算字符串长度,替换字符串内容等;(比如,显示手机号码的时候,只显示号码后四位就是利用字符函数处理的)

● 日期函数:获取当前日期,计算两个日期相差天数,日期偏移等;(比如,计算100天后是几月几号,星期几就可以利用日期函数来实现)

● 条件函数:这类函数相对简单;

基本函数


MySQL基本函数

一:数字函数

注:

……………………………………………………

注:


二:日期函数

1.获取系统当前时间

……………………………………………………

常用的函数有 TIMEDIFFTIMESTAMPDIFF ,两者用法稍有区别,后者更为灵活,这都是看个人习惯。

1.  TIMEDIFF:两个时间之间的差值

TIMEDIFF(time1, time2)

两者参数都是必须的,都是一个时间或者日期时间表达式。如果指定的参数不合法或者是 NULL,那么函数将返回 NULL。

对于这题而言,可以用在 minute 函数里面,因为 TIMEDIFF 计算出来的是时间的差值,在外面套一个 MINUTE 函数,计算出来的就是分钟数。

  1. TIMESTAMPDIFF:用于计算两个日期的时间差
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
# 参数说明
#unit: 日期比较返回的时间差单位,常用可选值如下:
SECOND:秒
MINUTE:分钟
HOUR:小时
DAY:天
WEEK:星期
MONTH:月
QUARTER:季度
YEAR:年
# TIMESTAMPDIFF函数返回datetime_expr2 - datetime_expr1的结果(人话: 后面的 - 前面的  即2-1),其中datetime_expr1和datetime_expr2可以是DATE或DATETIME类型值(人话:可以是“2023-01-01”, 也可以是“2023-01-01- 00:00:00”)

这题需要进行分钟的比较,那么就是 TIMESTAMPDIFF (MINUTE, 开始时间,结束时间) < 5

2.日期格式化函数:

日期格式化函数:第一个参数是某个日期,第二个参数是希望得到的日期格式;

……………………………………………………

日期格式化函数中的表达式: 这儿的表达式是可以多个组合使用的。

案例1: 利用日期函数,查询明年你的生日是星期几

案例2: 利用日期函数,查询1981年上半年入职的员工有多少人:

……………………………………………………

日期函数注意事项:不能加减乘除运算

……………………………………………………

3.日期偏移计算函数:

……………………………………………………

4.日期偏移计算函数:


三:字符函数

字符函数是处理字符串的,如,手机号码隐藏只保留后四位,员工名字首字母大写等等。

……………………………………………………


四:条件函数

在编程语言里,可以做if else的条件判断,在MySQL中也有类似的内容。

1.简单的判断

案例1 :节日公司发放礼品,SALES部门发放礼品A,其他部门发放礼品B,打印每名员工发放的礼品:

​ SELECT e.empno,e.ename,d.dname, IF(d.dname=“SALES”,“礼品A”,“礼品B”) FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno;

……………………………………………………

2.复杂的条件判断

【CASE WHEN THEN】不仅仅可以用在SELECT语句中,INSERT语句,DELETE语句,UPDATE语句都可以使用;

案例1 :公司组织员工集体旅游,每个部门旅游目的地是不同的;SALES部门去P1地点,ACCOUNTING部门去P2地点,RESEARCH部门去P3部门,查询每名员工的旅行地点;


    SELECT e.empno,e.ename,d.dname,
    CASE d.dname
    	WHEN "SALES" THEN
    		"P1"
    	WHEN "ACCOUNTING" THEN
    		"P2"
    	WHEN "RESEARCH" THEN
    		"P3"
    	ELSE
    		NULL
    END
    FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno;

标准写法:还好了,,,


    SELECT e.empno,e.ename,d.dname,
    CASE
    	WHEN d.dname="SALES" THEN "P1"
    	WHEN d.dname="ACCOUNTING" THEN "P2"
    	WHEN d.dname="RESEARCH" THEN "P3"
    END AS place
    FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno;

……………………………………………………

案例2:【CASE WHEN THEN】不仅仅可以用在SELECT语句中,INSERT语句,DELETE语句,UPDATE语句都可以使用;

 UPDATE t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
    LEFT JOIN(SELECT deptno,AVG(sal) as avg FROM t_emp GROUP BY deptno) t ON e.deptno=t.deptno
    SET e.sal=(
    	case
    		WHEN d.dname="SALES" AND FLOOR(DATEDIFF(NOW(),e.hiredate)/365)>=20 THEN e.sal*1.1
    		WHEN d.dname="SALES" AND FLOOR(DATEDIFF(NOW(),e.hiredate)/365)<20 THEN e.sal*1.05
    		WHEN d.dname="ACCOUNTING" THEN e.sal+300
    		WHEN d.dname="RESEARCH" AND e.sal<t.avg THEN e.sal+200
    		WHEN e.deptno IS NULL THEN e.sal+100
    		ELSE e.sal
    	END
    );

注:每一条WHEN中的条件,都是针对表连接后的结果集的同一条记录的。。。不仅仅针对这个案例,