函数
常见函数
/*
函数:类似于java中的方法
为了解决某个问题,将编写一系列的命令集合封装在一起,对外仅暴露方法名,供外部调用
1、自定义函数
2、调用函数:需要知道函数名以及函数功能
常见函数:
字符函数:
concat:拼接字符
substr:截取子串
length:获取字节长度
char_length:获取字符长度
upper:字符转换为大写
lower:字符转换为小写
trim:去除前后指定字符
left:从左开始截取子串
right:从右开始截取子串
lpad:左填充
rpad:右填充
instr:获取字符串第一次出现的索引
strcmp:比较两个字符串大小
数字函数;
abs:获取绝对值
ceil:向上取整
floor:向下取整
round:四舍五入
truncate:截断
mod:取余
日期函数:
now:当前日期和时间
curdate:当前日期
curtim:当前时间
datediff:时间差
date_format:指定日期时间格式
str_to_date:按指定格式解析为日期时间类型
流程控制函数:
if:如果
case:类似java的switch
*/
#一、字符函数
1、CONCAT 拼接字符
SELECT CONCAT(last_name,'我是拼接进来的',first_name)
FROM employees;
2、LENGTH 获取字节长度
SELECT LENGTH('abcd中国');-- 10
3、CHAR_LENGTH 获取字符个数
SELECT CHAR_LENGTH('abcd中国');-- 6
4、SUBSTRING 截取子串
/*
注意:起始索引从1开始!!!
substr(str,起始索引,截取的字符长度)
substr(str,起始索引)
*/
SELECT SUBSTR('如果我是dj你还爱我吗',9,1);-- 爱
5、INSTR获取字符第一次出现的索引
SELECT INSTR('如果我是dj你还爱我吗','爱');-- 9
6、TRIM去前后指定的字符,默认是去空格
SELECT TRIM(' 如果我是dj 你还爱我吗 ');
SELECT TRIM('x' FROM 'xx如果x我是dj你还爱我吗xx');-- 如果x我是dj你还爱我吗
7、LPAD/RPAD 左填充/右填充(按指定的长度显示字符)
SELECT LPAD('独孤九剑',10,'a');-- aaaaaa独孤九剑
SELECT RPAD('独孤九剑',1,'a');-- 独
8 、 UPPER/ LOWER转换大小写 -- 案例:查询员工表的姓名,要求格式:姓首字符大写,其他字符小写,名所有字符大写,且姓和名之间用_分割,最后起别名“OUTPUT”
SELECT
CONCAT(
UPPER(SUBSTR(first_name, 1, 1)),
LOWER(SUBSTR(first_name, 2)),'_',UPPER(last_name)
) AS "OUTPUT"
FROM
employees ;
9、STRCMP 比较两个字符大小(前面的比后面的大返回1,小返回-1)
SELECT STRCMP('aa','bb');-- -1
10、LEFT/RIGHT 截取子串,从左/右开始
SELECT LEFT('鸠摩智',1);
SELECT RIGHT('鸠摩智',1);
#二、数学函数
1、ABS 绝对值
SELECT ABS(-34.6);
2、CEIL 向上取整 返回>=该参数的最小整数
SELECT CEIL(-1.09); -- 1
3、FLOOR 向下取整,返回<=该参数的最大整数
SELECT FLOOR(-1.09); -- -2
4、ROUND 四舍五入
SELECT ROUND(1.8712345,1);-- 1.9
5、TRUNCATE 截断
SELECT TRUNCATE(1.8712345,1);-- 1.8
6、MOD 取余
SELECT MOD(-10,3);
取余公式:a%b = a-(INT)a/b*b
小技巧:被取余数是正数/负数结果也是
#三、日期函数
1、NOW -- 当前日期和时间
SELECT NOW();
2、CURDATE -- 当前日期
SELECT CURDATE();
3、CURTIME -- 当前时间
SELECT CURTIME();
4、DATEDIFF -- 计算时间差(日期错误时结果为null)
SELECT DATEDIFF('2020-03-30','2020-02-29');-- 30
5、DATE_FORMAT -- 指定日期时间格式
SELECT DATE_FORMAT('1998-01-02 15-20-10','%Y年%m月%d日 %H时%i分%s秒');-- 1998年01月02日 15时20分10秒
6、STR_TO_DATE -- 按指定格式解析字符串为日期时间类型
SELECT STR_TO_DATE('3/15 1998 10:20:20','%m/%d %Y %H:%i:%s');-- 1998-03-15 10:20:20
#四、流程控制函数
1、IF函数 -- 类似三元运算符
SELECT IF(100>9,'好','坏');
-- 案例:需求:如果有奖金,则显示最终奖金,如果没有,则显示0
SELECT IF(commission_pct IS NULL,0,12*salary*commission_pct)
FROM employees;
2、CASE函数
-- 情况1:类似于switch语句,可以实现等值判断
CASE 表达式
WHEN 值1 THEN 结果1
WHEN 值2 THEN 结果2
...
ELSE 结果n
END
-- 情况2:类似于多重IF语句,实现区间判断
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
...
ELSE 结果n
END
分组函数
/*
说明:分组函数往往用于实现将一组数据进行统计计算,最终得到一个值,又称为聚合函数或统计函数
分组函数清单:
sum(字段名):求和
avg(字段名):求平均值
max(字段名):求最大值
min(字段名):求最小值、
count(字段名):计算非空字段值的个数
*/
#案例1 :查询员工信息表中,所有员工的工资和、工资平均值、最低工资、最高工资、有工资的个数
SELECT SUM(salary),AVG(salary),MIN(salary),MAX(salary),COUNT(salary) FROM employees;
#案例2:添加筛选条件
-- ①查询emp表中记录数:
SELECT COUNT(employee_id) FROM employees;
-- ②查询emp表中有佣金的人数:
SELECT COUNT(salary) FROM employees;
-- ③查询emp表中月薪大于2500的人数:
SELECT COUNT(salary) FROM employees WHERE salary>2500;
#④查询有领导的人数:
SELECT COUNT(manager_id) FROM employees;
#count的补充介绍★
-- 1、统计结果集的行数,推荐使用count(*)
-- -- 方式一:检测每一行的每一列,只要有不为null的值,则返回该行
SELECT COUNT(*) FROM employees;
SELECT COUNT(*) FROM employees WHERE department_id = 30;
-- -- 方式二:在每一不为空的行前面加一列,并指定值用来判断非空(效率低)
SELECT COUNT(1) FROM employees;
SELECT COUNT(1) FROM employees WHERE department_id = 30;
-- 2、搭配distinct实现去重的统计
-- -- 需求:查询有员工的部门个数
SELECT COUNT(DISTINCT department_id) FROM employees;
原文:https://www.cnblogs.com/csyh/p/12390639.html