函数的调用:
SELECT 函数名(实参列表) 【FROM 表名】
一、单行函数
1.字符函数
(1)length函数(获取参数值的字节个数)
- 用法
SELECT LENGTH('张小明hahaha');
- 运行结果
注: 由于编码表是utf-8,故一个汉字占3个字节。
(2)concat函数(拼接字符)
- 用法
SELECT CONCAT(last_name,'-',first_name) FROM employees;
- 运行结果
(3)upper、lower(将字符变为大写,变为小写)
- 用法
SELECT UPPER(last_name),LOWER(first_name) FROM employees;
- 运行结果
(4)substr(用来截取字符的一部分,即获取子串)
- 用法
在MySQL中,索引是从1开始的。
用法1:
SELECT SUBSTR('好好学习天天向上',5); //获取从索引5之后的所有字符(截取指定索引处后面的所有字符)
用法2:
SELECT SUBSTR('好好学习天天向上',7,2) 名字; //获取从索引7开始的2个字符(截取从指定索引处指定字符长度的字符)
- 运行结果
用法1结果:
用法2结果:
(5)instr(返回子串中第一次出现的索引,若找不到则返回0)
- 用法
SELECT INSTR('好好学习天天向上','好好');
- 运行结果
(6)trim(去除前后指定的空格和字符,默认为空格)
- 用法
用法1:
SELECT TRIM(' 好好学习 天天向上 '); //去除字符前后的空格,但不能去除字符中间的空格
用法2:
SELECT TRIM('aa' FROM 'aaaaa好好学习aaa天天向上aaaa'); //去除字符前后指定的字符,如果将aa改为数字,则不用加‘’引号。
- 运行结果
用法1结果:
用法2结果:
(7)lpad和rpid(用指定的字符实现左/右填充至指定长度)
- 用法
SELECT LPAD('好好学习',7,'a'); //7为填充后的字符长度,若7小于填充前的字符长度,则将原字符取7位即可
- 运行结果
(8)replace(替换)
- 用法
SELECT REPLACE('好好学习天天向上','天天','年年'); //字符1是原字符,字符2是需要被替换的字符,字符3是替换成的内容
- 运行结果
2.数学函数
(1)round(四舍五入)
- 用法
用法1:
SELECT ROUND(-1.55);
用法2:
SELECT ROUND(-1.556,2); //小数点后保留2位
- 运行结果
用法1结果:
用法2结果:
(2)ceil(向上取整,返回>=该参数的最小整数)和floor(向下取整)
- 用法
SELECT CEIL(-1.000000000002);
- 运行结果
(3)truncate(小数点后保留指定位数)
- 用法
SELECT TRUNCATE(1.000000000002,2); //小数点后保留2位
- 运行结果
(4)mod(取余)
mod(a,b)相当于a-a/b*b ,其中ab正负均可
- 用法
SELECT MOD(-10,-3);
- 运行结果
3.日期函数
(1)now(返回当前系统日期+时间)
- 用法:
SELECT NOW();
(2)curdate(返回当前系统日期,不包含时间)
- 用法:
SELECT CURDATE();
(3)curtime(返回当前时间,不包含日期)
- 用法:
SELECT CURTIME();
(4)str_to_date(将日期格式的字符转换成指定格式的日期)
- 用法
SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d');
- 运行结果
(5)date_format(将日期转换成字符)
- 用法
SELECT DATE_FORMAT(NOW(),'%y年%m月%d日');
- 运行结果
4.流程控制函数
(1)if(if else的效果)
- 用法
SELECT IF(10>5,'大','小');
- 运行结果
(2)case(处理多分支)
- 用法
用法1:类似于java中的switch case,处理等值判断
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n; //对应的java语句为default
end
用法2:类似与java中的多重if,处理条件判断
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
用法1和用法2的区别在于case后面是否加语句了
- 举例如下
1.用法1举例
查询员工的工资,要求部门号=30,显示的工资为1.1倍,部门号=40,显示的为1.2倍,其他部门为原工资。
SELECT
salary,
department_id,
CASE
department_id
WHEN 30
THEN salary * 1.1
WHEN 40
THEN salary * 1.2
ELSE salary
END AS 新工资
FROM
employees;
2.用法2举例
查询员工的工资,工资>20000,显示级别A,工资>15000,显示级别B,否则显示级别C
SELECT
salary,
CASE
WHEN salary>20000
THEN 'A'
WHEN salary>15000
THEN 'B'
ELSE 'C'
END AS 工资等级
FROM
employees;
二、分组函数
功能: 用作统计使用,又称为聚合函数/统计函数/组函数
(1)分组函数的分类
1.sum函数(求和)
2.avg函数(平均值)
3.max/min函数(最大/最小值)
4.count函数(计数)
(2)特点
1.sum、avg一般用于处理数值型;max、min、count可以处理任何数据类型。
2.以上五个分组函数都忽略null值。,除了count(*)。
3.都可以搭配distinct使用,用于统计去重后的结果。
SELECT COUNT(DISTINCT salary),COUNT(salary) FROM employees ; //去重和不去重的用法
4.count的参数可以支持:字段、* 、常量值,一般放1(建议使用 count(*))