目录
1.类似Java定义方法
2.可以带参数
3.必须有返回值(一行一列) ,重点:java方法可以没有返回值,数据库函数必须要有返回值
select max(score) from sc;
4.函数可以嵌套到sql语句中
注:存储过程则不可以
5.函数可嵌套调用 round(avg)
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;
按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
- select s.*,year(now())-year(s.sage),if(month(now())<month(s.sage),-1,0)
- from t_student s;
查询本月过生日的学生
select * from t_student where month(now())=month(sage);
查询下月过生日的学生
- 第一种
- select * from t_student where month(now())+1=month(sage)第一种
date_add(NOW(), interval 1 MONTH):当前时间+1年、月、日
- 第二种
- select * from t_student where month(DATE_ADD(now(),interval 1 month))=month(sage);
1) UPPER()/LOWER():大小写互转
- select upper('cxy')
- select lower('CXY')
2) REPLACE():搜索并替换字符串中的子字符串
uuid:随机函数
select uuid(),replace(uuid(),'-','');
3) SUBSTRING():从具有特定长度的位置开始的最一个子字符串
- select substring('wwwcom',1,5)
- select substring('wwwcom',5)
4) TRIM():去除前后空格
5) LENGTH():获取字符串长度
- -- 去空格、长度
- select length(' abcdefg '),length(trim(' abcdefg '))
6) CONCAT():合并字符串函数,返回结果为连接参数产生的字符串,参数可以是一个或多个
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
行列转换
需求:每一个学生的语数外分数
第一种:
- SELECT
- s.sid,
- s.sname,
- sum(IF(sc.cid = '01', sc.score, 0 )) 语文,
- sum(IF(sc.cid = '02', sc.score, 0 )) 数学,
- sum(IF(sc.cid = '03', sc.score, 0 )) 英语
- FROM
- t_student s
- LEFT JOIN t_score sc ON s.sid = sc.sid
- GROUP BY s.sid,s.sname
第二种:
- select
- s.sid,s.sname
- SUM(case when sc.cid='01' then sc.score end) 语文
- SUM(case when sc.cid='01' then sc.score end) 数学
- SUM(case when sc.cid='01' then sc.score end) 英语
- from
- t_student s
- LEFT JOIN t_score sc
- on s.sid=sc.sid
- 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
1) SUM():求和。常与GROUP BY一起使用,也可单独使用
2) AVG():求平均值。常与GROUP BY一起使用,也可单独使用
3) MAX():求最大值。常与GROUP BY一起使用,也可单独使用
4) MIN():求最小值。常与GROUP BY一起使用,也可单独使用
5) COUNT():统计记录的条数。常与GROUP BY一起使用,也可单独使用
1) UNION:将所有的查询结果合并到一起,然后去除掉相同的记录
- select 1,'cxy',18
- union
- select 2,'aa',19
- union
- select 2,'aa',19
运行结果:

2) UNION ALL:将所有的查询结果合并到一起,不会去除掉相同的记录
- select 1,'cxy',18
- union all
- select 2,'aa',19
- union all
- select 2,'aa',19
运行结果:
前提条件:结果集列数个数相同,列的类型还要相同或是兼容
使用场景:在项目统计报表模块,用来合并数据