2020年2月4日
12:10
概念:类似于Java的方法,将一组逻辑代码语句而封装在方法体中,对外暴露方法名
好处:1、隐藏了实现细节 2、提高了代码的重用性
调用:select 函数名(实参列表)【from 表】
特点: 1、叫什么(函数名)
2、干什么(函数功能)
分类:
1、单行函数
如 concat、length、ifnull等
2、分类函数
#一、字符函数
#1.length 获取参数值的字节个数(汉字占用三个字节)
SELECT LENGTH('john');
SELECT LENGTH('张三丰hahaha');
系统中各常量字符编码格式
SHOW VARIABLES LIKE '%char%';
结果:
character_set_client |
utf8 |
character_set_connection |
utf8 |
character_set_database |
gb2312 |
character_set_filesystem |
binary |
character_set_results |
utf8 |
character_set_server |
utf8mb4 |
character_set_system |
utf8 |
character_sets_dir |
F:MySQLmysql-8.0.18 |
#2.concat 拼接字符串
SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;
#3.upper、lower
SELECT UPPER('john');
SELECT LOWER('joHn');
#示例:将姓变大写,名变小写,然后拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;
#4.substr、substring
注意:索引从1开始
#截取从指定索引处后面所有字符
SELECT SUBSTR('李莫愁爱上了陆展元',7) out_put;
#截取从指定索引处指定字符长度的字符
SELECT SUBSTR('李莫愁爱上了陆展元',1,3) out_put;
#案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) out_put
FROM employees;
#5.instr 返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷八侠') AS out_put;
#6.trim 去除字符串中的空格或者是指定字符(串)
SELECT LENGTH(TRIM(' 张翠山 ')) AS out_put;
SELECT TRIM('aa' FROM 'aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') AS out_put;
#7.lpad 用指定的字符实现左填充指定长度
SELECT LPAD('殷素素',2,'*') AS out_put;
#8.rpad 用指定的字符实现右填充指定长度
SELECT RPAD('殷素素',12,'ab') AS out_put;
#9.replace 替换
SELECT REPLACE('周芷若周芷若周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') AS out_put;
二、数字函数
#1、round() 四舍五入
select round(1.65);
select round(1.6665,3);
#2、ceil 向上取整数 返回>=参数的整数
select ceil(1,65);
select ceil(-1.0);
#3、floor 向下取整数返回<=参数的整数
select floor(1.65);
#4、truncate 截断
#5、mod 取余
三、时间函数
#1、返回现在系统时间
select now();
#2、查询现在系统时间的年、月、日。
select year(now()) 年;
select yearname(now()) 年;
select month(now()) 月;
select monthname(now()) 月;
select day(now()) 日;
select dayname(now ()) 日;
#3、str-to-date 将字符通过指定的格式转换为日期
select str_to_date('1992-3-2','%Y-%c-%d') as out_put;
select * from employees where hiredate = str_to_date('1992 4-3','%Y %c-%d');
#4、date_format(),将日期转换为字符(与上面相反)
4、流程控制函数
#1、if函数 if else 效果
select if(16>10,'xixi','hehe');
结果:
xixi
select last_name,commission_pct,if(commission_pct is null,'没工资,完了','有工资嘻嘻') 备注 from employees;
#2、case函数 ( switch效果)
格式:
case 条件或者常量
when 常量1 then 要执行的语句
when 常量2 then 要执行的语句
when 常量3 then 要执行的语句
…
end
select case 50
when 10 then 'good'
when 50 then 'sad'
end
#3、case 函数使用2(多重if效果)
格式:
case
when 条件1 then 要显示的值或者语句1
when 条件2 then 要显示的值或者语句2
when 条件3 then 要显示的值或者语句3
…
else 要显示的值或语句n
end
select concat(last_name,' ',first_name) as name,salary,
case
when salary>20000 then 'A'
when salary>15000 then 'B'
when salary>10000 then 'C'
else 'D'
end as 工资级别
from employees
order by salary desc;