1.1 什么是函数?
要想实现上面的这些效果,就得借助于MySQL当中的内置函数。
函数:是指一段可以直接被另一段程序调用的程序或代码。
MySQL当中内置了很多的函数,根据其操作的数据类型,分为以下四类:
- 字符串函数
- 数值函数
- 日期函数
- 流程控制函数
1.2 字符串函数
函数 | 功能 |
---|---|
char_length(s) | 返回字符串的字符长度 |
concat(s1,s2,... sn) | 字符串拼接,将s1,s2,... sn拼接成一个字符串 |
concat_ws(sep,s1,s2,... sn) | 字符串拼接,将s1,s2,... sn拼接成一个字符串,中间使用sep分隔 |
left(s,len) | 返回字符串左侧的len个长度的字符串 |
right(s,len) | 返回字符串右侧的len个长度的字符串 |
substring(str,start,len) | 返回字符串str从start位置起的len个长度的字符串[注意:start从1开始] |
-- MySQL函数:
-- 字符串函数
-- 1. char_length(s) 返回字符串的字符长度
select name,char_length(name) from tb_emp;
-- 2. concat(s1,s2,...sn) 字符串拼接,将s1,s2,...sn拼接成一个字符串
select concat(id,'-',name) from tb_emp;
-- 3. concat_ws(sep,s1,s2,...sn) 字符串拼接,将s1,s2,...sn拼接成一个字符串,中间使用sep分隔
select concat_ws(' - ',username,name) from tb_emp;
-- 4. left(s,len) 返回字符串左侧的len个长度的字符串
select left(username,5) from tb_emp;
-- 5. right(s,len) 返回字符串右侧的len个长度的字符串
select right(username,5) from tb_emp;
-- 6. substring(str,start,len) 返回字符串str从start位置起的len个长度的字符串
-- 比如:我想查询每一个员工的姓氏
select substring(name,1,1) from tb_emp;
1.3 数值函数
函数 | 功能 |
---|---|
ceil(x) | 向上取整 |
floor(x) | 向下取整 |
rand() | 返回0~1内的随机数 |
round(x,y) | 求参数x的四舍五入的值,保留y位小数 |
-- 数值函数
-- select后面如果没有指定任何的from的话,代表我们不需要从表当中来查询
-- 1. ceil(x) 向上取整
select ceil(2.1); -- 3
-- 2. floor(x) 向下取整
select floor(2.9); -- 2
-- 3. rand() 返回0~1内的随机数
select rand(); -- 0.632749031887156
-- 4. round(x,y) 求参数x的四舍五入的值,保留y位小数
select round(2.453,2); -- 2.45
1.4 日期函数
日期时间类型的函数
函数 | 功能 |
---|---|
now() | 返回当前日期和时间 |
curdate() | 返回当前日期 |
curtime() | 返回当前时间 |
year(date) | 获取指定date日期的年份 |
month(date) | 获取指定date的月份 |
day(date) | 获取指定date的日期 |
datediff(date1,date2) | 返回起始时间date1和结束时间date2之间的天数 |
date_format(date,format) | 日期时间格式化 |
-- 日期时间类型的函数
-- 1. now() 返回当前日期和时间
select now(); -- 2023-09-01 19:02:40
-- 2. curdate() 返回当前日期
select curdate(); -- 2023-09-01
-- 3. curtime() 返回当前时间
select curtime(); -- 19:02:59
-- 4. year(date) 获取指定date日期的年份
select year('2023-02-05 00:09:45'); -- 2023
-- 5. month(date) 获取指定date的月份
select month('2023-02-05 00:09:45'); -- 2
-- 6. day(date) 获取指定date的日期
select day('2023-02-05 00:09:45'); -- 5
-- 7. datediff(date1,date2) 返回起始时间date1和结束时间date2之间的天数
select datediff('2002-07-08 00:09:45','2023-08-14 00:09:45'); -- 7707
-- 8. date_format(date,format) 日期时间格式化
-- format函数多的一批,鼠标往上一悬浮,会自动提示
select date_format('2002-07-08 00:09:45','%Y'); -- 2022
-- 需求:获取2015年入职的员工
select * from tb_emp where year(entrydate) = '2015';
1.5 流程控制函数
函数 | 功能 |
---|---|
if(value,t,f) | 如果value为true,则返回t,否则返回f |
ifnull(value1,value2) | 如果value1不为空,返回value1,否则返回value2 |
case when cond1 then res1 ... [else result] end | 如果cond1为true,返回res1,... 否则返回result默认值 |
case expr when val1 then res1 ... [else result] end | 如果expr的值等于val1,返回res1,... 否则返回result默认值 |