一、函数概念:一组可以直接被另一段程序调用的程序或代码。
函数分类:1.字符串函数2.数值函数3.日期函数4.流程函数
二、函数功能
(1)字符串函数函数
1.concat (s1,s2,s3...sn)字符串拼接
eg(例如):concat('Hello','MySQL'); --结果:Hello MySQL
2.LOWER(str) 把大写字符转化成小写字符
LOWER('HELLO'); --结果:hello
3.UPPER(str) 把小写字符转化成大写字符
4.LPAD(str,n,pad) 左填充字符串pad 对 str 左边填充,达到n个字符串长度
LPAD('01',5,'*'); -- '01'字符串,长度为5,不足5位字符串左侧用‘*’填充 结果:***01
5.RPAD(str,n,pad) 右填充(同上)
RPAD('01',5,'*'); -- '01'字符串,长度为5,不足5位字符串右侧用‘*’填充 结果:01***
6.TRIM(str) 去掉字符串头部和尾部的空格
TRIM(' hello mysql'); --结果:hello mysql (中间的空格不受影响)
7.SUBSTRING(str,start,len) 返回字符串str 从 start 位置起的len 个长度的字符串
SUBSTRING('hello',2,2); --结果:el (返回从第二位的‘e’开始长为2的字符串)
(2)数值函数
1.CEIL(x) 向上取整
SELECT CEIL(2.3); --结果:3
SELECT CEIL(-2.3);--结果:-2
2.FLOOR(x) 向下取整
SELECT FLOOR(2.3); --结果:2
SELECT FLOOR(-2.3); --结果:-3
3.MOD(x,y) 返回x / y 的摸
SELECT MOD(3,4); --结果:0
4.RAND() 返回0 ~ 1内的随机数
SELECT RAND(); -- 结果:0.757139
5.ROUND(x.,y) 求参数 x 的四舍五入的值并保留 y 位小数
SELECT ROUND (2.13,2); --结果:2.13
SELECT ROUND (2.136,2); --结果:2.14
(3)日期函数
1.CURDATE() 返回当前日期
SELECT CURDATE(); -- 结果:2024-05-13
2.CURTIME() 返回当前时
SELECT CURTIME(); -- 结果:17:54:38
3.NOW() 返回当前日期和时间
SELECT NOW(); --结果:20204-05-13 17:55:02
4.YEAR(date) 获取指定日期的年份
SELECT YEAR(NNOW()); -- 结果:2024
5.MONTH(date) 获取指定日期的月份
SELECT MONTH(NOW()); --结果:5
6.DAY(date) 获取指定日期的天数
7.DATe_ADD(date,INTERVAL expr type) 返回一个日期/时间值加上一个时间间隔 expr 后的时间值
SELECT DATE_ADD(NOW(),INTERVAL 7 DAY); -- 结果:2024-05-20 17:58:26
8.DATEDIFF(date1,date2) 返回起始时间 date1 和结束时间 date2 之间的天数
SELECT DATEDIFF('2021-12-01','2021-11-01'); -- 结果:30(两个日期之间相差20天)
(4)流程函数(可实现条件筛选)
1.IF(value,t,f)
value 为 true,返回 t,否则返回 f。
SELECT IF(true,'hello','hi'); -- 结果:hello
2.IFNULL(value1,value2)
value1 不为空,返回1,否则返回value2。
SELECT IFNULL('hello','hi'); -- 结果:hello
SELECT IFNULL(' ','default'); -- 结果: (空的字符串)
3.CASE WHEN [value1] THEN [res1] ,[res2]... ELSE [defalut] END;
value1 为 true,返回 res1,res2...,否则返回defalut(默认值)。
SELECT name,
(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else
'二线城市' end) as '工作地址' from emp;
-- 从emp 表中查询员工工作地址(workaddress),若是北京、上海则标记为“一线城市”,其他标记为“二线城市”。
4.CASE [expr] WHEN [value1] THEN [res1],[res2],... ELSE [default] END;
若 expr 的值等于value1,返回值 res1,res2...,否则返回default默认值。
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) ‘英语'
from score; --对score表中不同科目成绩进行分等级,大于等于85分为优秀,60到84之间为及格,小于60为不及格。