MySQL函数笔记_MySQL笔记-函数

函数

常见函数

/*

函数:类似于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

你可能感兴趣的:(MySQL函数笔记)