1.常见函数概述
格式:
select fun()[实参列表] [from table_name]; # 当函数用到表中的字段时,带表
特点:
- 函数名
- 函数功能
分类:
- 单行函数:完成功能
- 字符函数
- 数学函数
- 日期函数
- 其他函数
- 流程控制
- 分组函数:作统计使用
2.单行函数
(1) 字符函数
length()
获取字符串长度
select length("hello");
concat()
字符串拼接函数
select concat(first_name,'_',last_name) AS name from employees;
upper() lower()
变大写、变小写
select upper("hello");
select lower("HELLO");
substr() substring()
获取指定下标后面所有的字符
获取指定下标下指定长度的字符
sql中,index从1开始
select substr("干啥啥不行,吃饭第一名", 7 );
select substr("干啥啥不行,吃饭第一名", 1, 5);
instr()
返回子串第一次出现的下标,没有就返回0
select instr("hello world", "world");
trim()
去除首尾指定字符,如果没有指定,就是去除空格
select trim(" hello world ");
select trim('aa' from "aaaaahello worldaaaaaaaaaa");
lpad rpad()
左填充,填充指定的字符
右填充,填充指定的字符
select lpad("ok", 10,'*');
replace()
字符替换,替换所有
select replace("hello hello world", "hello", "bye");
(2) 数学函数
round()
四舍五入,默认取整数
select round(9.99);
select round(9.99, 1);
ceil()
向上取整
select ceil(1.02);
select ceil(-1.02);
floor()
向下取证
select floor(1.22);
select floor(-1.02);
truncate()
截断,保留1位小数
select truncate(1.6888,1);
mod()
取余
mod(a,b) : a-a/b * b
select mod(10,-3); # 1
select -10 % 3; # -1
select 10 % 3; # 1
(3) 日期函数
now()
获取当前日期+时间
select now();
curdate()
当前日期
select curdate();
curtime()
当前时间
select curtime();
year()
获取年
select year(now());
select year('1999-10-18');
select year(hiredate) from employees;
month()
获取月
monthname()
获取月名(英文)
str_to_date()
转换成指定的格式
str_to_date("9-14-1999","%m-%d-%Y") # 用后面的格式解析前面的串到日期类型变量中
date_format()
日期格式化成字符串
date_format('2019/6/6','%Y年%m月%d日')
Y 1999
y 99
m 01
c 1
d 30
H 24
h 12
i min
s 59
(4) 其他函数
version() 版本
databases() 当前库
user() 当前用户
(5) 流程控制函数
if(a,b,c)
select if(
a,
b,
c
)
等效于
if(a)
b
else
c
case()
case 标记
when 值1 then value1/语句1; # 在select中这个分号不要带
when 值2 then value2/语句2;
when 值3 then value3/语句3;
...
else valuen/语句n;
end
# 查询员工的工资 根据部门号递增工资的显示
SELECT salary 原始工资, department_id,
CASE department_id
WHEN 30 THEN
salary*1.1
WHEN 40 THEN
salary*1.2
WHEN 50 THEN
salary*1.3
ELSE
salary
END AS 新工资
FROM employees;
case
when 条件 then value1/语句1 # 无分号
when 条件 then value2/语句2
when 条件 then value3/语句3
...
else valuen/语句n;
end
3.分组函数
使用
- sum 求和
- avg 平均值
- max 最大值
- min 最小值
- count 计算非空个数
# 用法
select sum(salary), max(salary) from employees;
参数支持
- sum、avg 一般仅支持数值;忽略NULL
- max、min、count 支持所有类型;忽略NULL
- 分组函数可以和distinct搭配实现去重:先把字段数据去重,然后分组函数进行处理。
- count(*) 统计行数 ; count(常量) 统计行数
- MYISAM引擎下: *快
- INNODB引擎下: 差不多 比带字段快
- 和分组函数一同查询的字段有限制:一同查询的字段必须是group by后的字段