Administrator
Published on 2021-08-05 / 137 Visits
0
0

MySQL核心之常见函数

常见函数

字符函数

length:获取参数值的字节个数

SELECT LENGTH('john');

concat:拼接字符串

SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;

upper、lower:大小写转换

#案例:将姓变大写,名变小写,然后拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name))  姓名 FROM employees;

substr、substring:截取字符串

注意:索引从1开始

#案例:截取从指定索引处后面所有字符
SELECT SUBSTR('李莫愁爱上了陆展元',7)  out_put;

#案例:截取从指定索引处指定字符长度的字符
SELECT SUBSTR('李莫愁爱上了陆展元',1,3) out_put;

#案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2)))  out_put
FROM employees;

instr 返回子串第一次出现的索引,如果找不到返回0

SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷八侠') AS out_put;

trim:去除空格或者指定字符

SELECT LENGTH(TRIM('    张翠山    ')) AS out_put;
SELECT TRIM('aa' FROM 'aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')  AS out_put;

lpad:用指定的字符实现左填充指定长度

SELECT LPAD('殷素素',2,'*') AS out_put;

rpad:用指定的字符实现右填充指定长度

SELECT RPAD('殷素素',12,'ab') AS out_put;

replace:替换

SELECT REPLACE('周芷若周芷若周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') AS out_put;

数学函数

round:四舍五入

SELECT ROUND(-1.55);
SELECT ROUND(1.567,2);

ceil:向上取整,返回大于等于该参数的最小整数

SELECT CEIL(-1.02);

floor:向下取整,返回小于等于该参数的最大整数

SELECT FLOOR(-9.99);

truncate:截断

SELECT TRUNCATE(1.69999,1);

mod:取余

SELECT MOD(10,-3);

日期函数

now:返回当前系统日期 + 时间

SELECT NOW();

curdate:返回当前系统日期,不包含时间

SELECT CURDATE();

curtime:返回当前时间,不包含日期

SELECT CURTIME();

获取指定的部分,年、月、日、小时、分钟、秒

SELECT YEAR(NOW()) 年;
SELECT YEAR('1998-1-1') 年;
SELECT YEAR(hiredate) 年 FROM employees;
SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月;

str_to_date:将字符通过指定的格式转换成日期

SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS out_put;

date_format:将日期转换成字符

SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;
#案例:查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年') 入职日期
FROM employees
WHERE commission_pct IS NOT NULL;

DIFFRENCE:日期相隔天数

SELECT DATEDIFF('1995-2-7','1995-2-6');

分组函数

功能

  • 用作统计使用,又称为聚合函数或统计函数或组函数

分类

  • sum 求和
  • avg 平均值
  • max 最大值
  • min 最小值
  • count 计算个数

特点

  • sum、avg 一般用于处理数值型,max、min、count 可以处理任何类型

  • 以上函数都忽略 null 值

  • 可以和 distinct 搭配实现去重的运算

  • 配合分组函数一同查询的字段要求是 group by 后的字段

案例

#案例:简单使用
SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MIN(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT COUNT(salary) FROM employees;

#案例:组合搭配
SELECT SUM(salary) 和,AVG(salary) 平均,MAX(salary) 最高,MIN(salary) 最低,COUNT(salary) 个数
FROM employees;
SELECT SUM(salary) 和,ROUND(AVG(salary),2) 平均,MAX(salary) 最高,MIN(salary) 最低,COUNT(salary) 个数
FROM employees;

#案例:和distinct搭配
SELECT SUM(DISTINCT salary),SUM(salary) FROM employees;
SELECT COUNT(DISTINCT salary),COUNT(salary) FROM employees;

#案例:查询部门编号为90的员工个数
SELECT COUNT(*) FROM employees WHERE department_id = 90;

流程控制函数

IF

类似 if else 效果

SELECT IF(10<5,'大','小');

SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,呵呵','有奖金,嘻嘻') 备注
FROM employees;

CASE

类似 switch case 用法

CASE 要判断的字段或表达式
WHEN 常量1 THEN 要显示的值1或语句1;
WHEN 常量2 THEN 要显示的值2或语句2;
...
ELSE 要显示的值n或语句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;

类似多重 if else

CASE 
WHEN 条件1 THEN 要显示的值1或语句1
WHEN 条件2 THEN 要显示的值2或语句2
...
ELSE 要显示的值n或语句n
END
SELECT salary,
CASE 
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 工资级别
FROM employees;

其他函数

查询 MySQL版本

SELECT VERSION();

选择数据库

SELECT DATABASE();

查询用户

SELECT USER();

Comment