概念:将一组逻辑语句封装在方法体中,对外暴露方法名 好处:1、隐藏了实现细节 2、提高了代码的重用性 调用: select 函数名(实参列表) 【from 表】; 特点: a)叫什么(函数名) b)干什么(函数功能) 分类: a)单行函数 eg: concat、length、ifnull等 字符函数: length、 concat、 trim、 substr、 instr、 upper、 lower、 lpad、 rpad、 replace 数学函数: round、 ceil、 floor、 truncate、 mod 日期函数: now、 curdate、 curtime、 year、 month、 monthtime、 day、 hour、 minute、 second、 str_to_date date_format datediff 其他函数: version、 database、 user 控制函数: if、 case b)分组函数 功能: 做统计使用,又称为统计函数、聚合函数、组函数 #1、字符函数 #a) length 获取参数值的字节个数 SELECT LENGTH('john'); SELECT LENGTH('张三丰hahaha'); ##utf8下 一个汉字占3个字节 #b) concat 拼接字符串 SELECT CONCAT(credit,'_',teacher) FROM course; #c) upper lower SELECT LOWER('John'); #d) substr 、 substring ##注意:索引从1开始 ##截取从指定索引处后面所有字符 SELECT SUBSTR('love',2) 结果; ##截取从指定索引处指定字符长度的字符(第二个参数指定截取长度) SELECT SUBSTR('love',2,1); #e) instr #返回子串第一次出现的索引,如果找不到返回0 SELECT INSTR('loove','o'); #f) trim SELECT LENGTH(TRIM(' hahaha ')); SELECT TRIM('a' FROM 'hahaha '); SELECT TRIM('a' FROM 'hahaha'); #g) lpad 用指定的字符实现左填充的指定长度 SELECT LPAD('love',10,'*'); #h) rpad 用指定的字符实现右填充的指定长度 SELECT RPAD('love',10,'you'); SELECT RPAD('love',2,'you'); #i) replace 替换 SELECT REPLACE('lovl','l','h'); #2)数学函数 #a) round 四舍五入 SELECT ROUND(-1.65); SELECT ROUND(1.567,2); #b) ceil 向上取整,返回>=该参数的最小整数 SELECT CEIL(-1.2); #c) floor 向下取整,返回<=该参数的最大整数 SELECT FLOOR(-1.23); #d) truncate 截断 SELECT TRUNCATE(1.65,1); #e) mod 取余 #mod(a,b) : a-a/b*b; #注意:结果为正还是为负,只与第一个参数有关 SELECT MOD(10,-3); #3)日期函数 #a) now 返回当前系统日期+时间 SELECT NOW(); #b) curdate 返回当前系统日期,不包含时间 SELECT CURDATE(); #c) curtime 返回当前时间,不包含日期 SELECT CURTIME(); #d) 可以获取指定的部分,年、月、日、小时、分钟、秒 SELECT YEAR(NOW()); SELECT YEAR('1999-12-16'); SELECT MONTH(NOW()); SELECT MONTHNAME(NOW()); #月份英文表示 #e) str_to_date: 将日期格式的字符转换成指定格式的日期 SELECT STR_TO_DATE('1-19 2020','%m-%d %Y'); #f) date_format:将日期转换成字符 SELECT DATE_FORMAT('1998-2-5','%Y年%m月%d日'); #g) datediff 计算两个日期相差的天数 SELECT DATEDIFF(NOW(),'2000-12-16'); #4、其他函数 SELECT VERSION(); SELECT DATABASE(); SELECT USER(); #5、流程控制函数 #a) if函数 : if else 的效果 SELECT IF(10<5,'大','小'); #b) case 函数的使用一: switch case的效果 case 要判断的字段或表达式 when 常量1 then 要显示的语句1; (如果是语句的话后面要加分号) when 常量2 then 要显示的值2 ... else 要显示的值n或语句n end #c) case 函数的使用二: 类似于多重if case when 条件1 then 要显示的值1或语句1; when 条件2 then 要显示的值2或语句2; ... else 要显示的值n或语句n; end #二、分组函数 分类: sum 求和、avg 平均值、max 最大值、min 最小值、count 计算个数 特点: 1、sum、avg 一般用于处理数值型 max、min、count 可以处理任何类型 2、以上分组函数都忽略null值 3、可以和 distinct 搭配实现去重的运算 4、count 函数的单独介绍 一般使用count(*)用作统计行数 5、和分组函数一同查询的字段有限制:要求是 group by 后的字段 #和 distinct 搭配 SELECT SUM(DISTINCT credit),SUM(credit) FROM course; SELECT COUNT(DISTINCT credit),COUNT(credit) FROM course; # count 函数的详细介绍 ##统计行数 SELECT COUNT(*) FROM course; SELECT COUNT(1) FROM course; 效率: MYISAM 存储引擎下, COUNT(*) 的效率高 INNODB 存储引擎下, COUNT(1)和 COUNT(*)的效率差不多,比 COUNT(字段)要高一些