一:字符函数
#进阶四:常见函数/*函数:类似于java中的学过的“方法”,为了解决某个问题,将编写的一系列命令集合封装在一起,对外仅仅暴露方法名,供外部使用。 1.自定义方法(函数) 2.调用方法(函数) 叫什么:函数名 干什么:函数功能常见函数: 1.字符函数 2.数学函数 3.日期函数 4.流程控制函数*/#一:字符函数 #1.拼接字符---CONCAT SELECT CONCAT('hello"',first_name,last_name) '备注' FROM employees; #2.获取字节长度---LENGTH SELECT LENGTH('hello,郭襄'); #3.获取字符长度---CHAR_LENGTH SELECT CHAR_LENGTH('hello,郭襄'); #4.截取子串---SUBSTR /* SUBSTR(str,起始索引,截取的字符长度) 注意:sql中起始索引从1开始!!!!!!!! */ SELECT SUBSTR('周杰伦和方文山',1,3);#返回结果:周杰伦 SELECT SUBSTR('周杰伦和方文山',5);#返回结果:方文山 #5.获取字符第一次出现的索引---INSTR SELECT INSTR('我已分不清那是友情,还是错过的爱情','情');#返回结果:9 #6.去前后指定的字符,默认是去空格---TRIM SELECT TRIM(' 周 杰 伦 ');#周 杰 伦 SELECT TRIM('x' FROM 'xxxxxxxxx周xx杰xx伦xxxxxxx');#周xx杰xx伦 #7:左填充/右填充---LPAD/RPAD SELECT LPAD('周杰伦',10,'a');#aaaaaaa周杰伦 SELECT RPAD('周杰伦',6,'b');#周杰伦bbb #8.变大写/变小写---UPPER/LOWER #案例:查询员工表的姓名,姓首字母大写 SELECT UPPER(SUBSTR(first_name,1,1)) FROM employees; #9.比较两个字符的大小---STRCMP SELECT STRCMP('aaa','abc');#返回结果:-1 /* 返回结果:按照顺序从前往后比,当比到a<b时,就不再比较a和c了 前面比后面大,返回1 前面比后面小,返回-1 一样,返回0 */ #10.截取子串---LEFT/RIGHT SELECT LEFT('周杰伦',1);#周 SELECT RIGHT('周杰伦',2);#杰伦
二:数学函数
#数学函数#1.绝对值---ABSSELECT ABS(-2.5);#2.5#2.向上取整---CEILSELECT CEIL(1.08);#2#3.向下取整---FLOORSELECT FLOOR(1.08);#1#4.四舍五入---ROUNDSELECT ROUND(1.23456);#1SELECT ROUND(1.23456,2);#1.23#5.截断---TRUNCATESELECT TRUNCATE(1.123456,0);#1SELECT TRUNCATE(1.123456,1);#1.1#6.取余---MOD(被除数的正负决定了余数的正负)SELECT MOD(10,3);#1SELECT MOD(-10,3);#-1SELECT MOD(10,-3);#1SELECT MOD(-10,-3);#-1
三:日期函数
#三:日期函数#1.获取当前日期和时间---NOWSELECT NOW();#2.获取当前日期---CURDATESELECT CURDATE();#3.获取当前时间---CURTIMESELECT CURTIME();#4.获取两个日期之差---DATEDIFFSELECT DATEDIFF('1999-9-9','2020-12-13');#-7766SELECT DATEDIFF('2020-12-13','1999-9-9');#7766#5.日期转换---DATE_FORMATSELECT DATE_FORMAT('1999-9-9','%Y年%m月%d日 %H小时%i分钟%s秒');#1999年09月09日 00小时00分钟00秒#6,按指定的格式解析字符串为日期---SELECT STR_TO_DATE('1/15 1998','%m/%d %Y');#1998-01-15
四:流程控制函数
#四:流程控制函数#1.IF函数SELECT IF(100>9,'好','坏');#好SELECT IF(100<9,'好','坏');#坏 #案例:如果有奖金,则先是最终奖金,如果没有,则现实0 SELECT IF(commission_pct IS NULL,0,salary*12*commission_pct) FROM employees;#2.CASE函数 #情况1:类似于switch语句,可以实现等值判断 /* case 表达式 when 值1 then 结果1 when 值2 then 结果2 …… else 结果n end */ #案例一:部门编号是30,工资变为2倍,部门编号是60,工资变为3倍,否则不变,显示部门部门编号、新工资、旧工资 SELECT department_id,salary, CASE department_id WHEN 30 THEN salary*2 WHEN 60 THEN salary*3 ELSE salary END AS '新工资' FROM employees; #情况2:类似于多重IF语句,可以实现区间判断(无表达式) /* case when 值1 then 结果1 when 值2 then 结果2 …… else 结果n end */ #案例二:如果工资大于20000,显示A,如果工资大于15000,显示B,工资大于10000,显示C,否则显示D SELECT salary, CASE WHEN salary>20000 THEN 'A' WHEN salary>15000 THEN 'B' WHEN salary>10000 THEN 'C' ELSE 'D' END AS 'grade' FROM employees;
五:分组函数
#进阶五:分组函数/*说明:分组函数往往用于实现将一组数据进行统计计算,最终得到一个值,又称为聚合函数或统计函数 分组函数清单: sum(字段名):求和 avg(字段名):求平均数 max(字段名):求最大值 min(字段名):求最小值 count(字段名):计算非空字段值的个数*/#案例一:查询员工信息表中所有员工的工资和、工资平均值、最高工资、最低工资、有工资的个数SELECT SUM(salary),AVG(salary),MAX(salary),MIN(salary),COUNT(salary)FROM employees;#count的补充介绍 #1.统计结果集的行数 SELECT COUNT(*) FROM employees;#专门统计表中有多少行,避免了非空的干扰 SELECT COUNT('1') FROM employees;#count("XXX"),在表中插入一个常量列,统计表中有多少行,效果和count(*)一样。 #2.搭配distinct实现去重的统计 #案例:查询有员工的部门个数 SELECT COUNT(DISTINCT department_id) FROM employees;