函数
1.单行函数
常用函数:
concat
length 获取字节长度,在utf8中中文字节长度为3英文字母为1
ifnull
upper 全变大写
lower 全变小写
substr 截取字符串 索引从1开始,截取从在指定字符长度的字符
instr 返回子串第一次出现的索引,如果找不到返回0
trim 去掉前后的字符(默认空格)例如 SELECT TRIM('a' FROM 'aaaaaaaa刘aaaa德华aaaaaa');
lpad 用指定的字符来做左填充并且指定长度
rpad 用指定的字符来做右填充并且指定长度
replace替换字符串中所有的
数学函数:
round 四舍五入
ceil 向上取整:返回>=该参数的最小整数
floor 向下取整:返回<=该参数的最大整数
truncate截断
mod 取余被除数为正就是正,为负就是负。 mod(a,b) = a-a/b*b
日期函数
SELECT DATEDIFF('1998-10-18' , '2020-12-14'); 时间的差值
select now(): 返回当前系统日期加上时间
select curdate(); 返回当前系统日期,不包含时间
select time(); 返回当前时间不包含日期
可以获取指定的不封,年月日,小时,分钟,秒 select year(now());
select str_to_date('1998-2-3', '%Y-%c-%d'): 将日期格式的字符转换成指定格式的日期
例如:select * from employees where hiredate = str_to_date('4-3 1992', '%c-%d %Y'); 由于有时需要用户输入字符串的数据,而且还不可能按照一定的格式,所以就可以使用这种方式
select dateformat(now(), '%y年/%m月/%d日') :将日期转换成字符
流程控制函数
select if(10<5, '大', '小');
case 要判断的字段或者表达式, when 常量1 then 要显示的值1或者语句1;
# case函数的使用一:switch case的效果
# case 要判断的字段或者表达式,
# when 常量1 then 要显示的值1或者语句1;
# when 常量2 then 要显示的值2或者语句2;
# else 要显示的语句n
# end
SELECT gender,`first_name`,
CASE first_name
WHEN 'jone' THEN "man"
ELSE "girl"
END AS testCase
FROM `employees`;
# case函数的使用二: 类似于java中的多重if
# case
# when 条件1 then 要显示的值1
# when 条件2 then 要显示的值2
# else 要显示的值n
# end
# 案例 如果工资<200 显示A级别,如果<1500 显示B级别
2.分组函数
1.功能:用作统计使用,又称聚合函数或统计函数或组函数
2.分类:
sum 求和,avg 平均值,max最大值,min最小值,count 计算个数
# 1.语法 SELECT SUM(salary) AS 求和 FROM `salaries`; SELECT AVG(salary) AS 平均值 FROM `salaries`; SELECT MIN(salary) AS 最小值 FROM `salaries`; SELECT MAX(salary) AS 最大值 FROM `salaries`; SELECT COUNT(salary) AS 总个数 FROM `salaries`; SELECT SUM(salary) AS 求和,AVG(salary) AS 平均值,MIN(salary) AS 最小值 FROM `salaries`;
3.参数支持那些类型:
sum 和 avg 只支持数值型(null不参与运算)
max 和min 由于,字符型也是可以排序的,所以支持字符型,当然日期型也是可以的(null会被忽略)
count 计数是计算非空值的个数。
4.和distinct搭配使用
SELECT SUM(DISTINCT salary) AS 求和 FROM `salaries`;
5. count 函数详细介绍
select count(*) from employees; 统计总共有多少行
select count(1) from employees; 相当于加了一列1然后统计有多少1
效率: myisam 存储引擎下, count (*) 小率高
INNOB 都一样
select count(*) from employees where salary>5000; # 和 where筛选一起用