MySQL内置函数梳理

近期一直围绕数据治理分析项目中数据可视化部分进行工作的开展,在从ODS中间库拉取数据到数仓时通常用MySQL函数进行数据的处理,期间接触使用到的函数也是各种各样的,包含字符串处理、日期处理、计算函数等,其中很多函数在数据处理时有着很重要的占比,本文将在项目实施过程中所用到的函数进行梳理和整理,为下次数据分析项目的快速实施打好基石。

名称解释

MySQLMySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

字符函数

字符函数是最常用的的一种函数,在一个具体应用中通常会综合几个甚至几类函数来实现字符串处理。本篇介绍有关字符串处理的函数,例如字符串的拼接,使用指定字符进行拼接,数字的格式化以及字符串的指定字符替换等。

1. CONCAT

含义:将多个字符串连接成一个字符串,concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

SELECT CONCAT('2019','-','12');    Result:2019-12

2. CONCAT_WS

含义:代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。

SELECT CONCAT_WS('-','2019','12','21');      Result:2019-12-21

3. FORMAT

含义:FORMAT函数在mysql中是数据内容格式化的,格式化后得到结果为:***,***,*,并且其具备四舍五入的功能。

SELECT FORMAT(12560.7,2);      Result:12,560.70

SELECT FORMAT(12560.78,1);      Result:12,560.8

4. LOWER

含义:将英文字母转换成小写。

SELECT LOWER('AEAI');      Result:aeai

5. UPPER

含义:将英文字母转换成大写。

SELECT UPPER('aeai');      Result:AEAI

6. LEFT

含义:返回具有指定长度的字符串的左边部分。

SELECT LEFT('agileai.com',7);      Result:agileai   

7. RIGHT

含义:返回具有指定长度的字符串的右边部分。

SELECT RIGHT('agileai.com',3);      Result:com  

8. LENGTH

含义:获取字符串长度。

SELECT LENGTH('www.agileai.com');      Result:15  

9. TRIM

含义:去掉字符串中的空格/去掉字符串中指定字符。

SELECT TRIM('  AEAI  ');     Result:AEAI   

含义:去掉字符串左右两边空格

SELECT LTRIM('  AEAI');     Result:AEAI

含义:去掉字符串左空格

SELECT RTRIM('  AEAI  ');     Result:  AEAI

含义:去掉字符串右空格

SELECT TRIM(LEADING 'www.' FROM 'www.agileai.com');     Result:agileai.com

含义:删除指定的首字符

SELECT TRIM(BOTH 's' FROM 'swww.agileai.coms');     Result:www.agileai.com

含义:删除指定的首尾字符

SELECT TRIM(TRAILING  '.com' FROM 'www.agileai.com');     Result:www.agileai

含义:删除指定的尾字符

10. REPLACE

含义:替换字符串。

SELECT REPLACE('www-agileai-com','-','.');     Result:www.agileai.com  

11. SUBSTRING

含义:截取字符串。

SELECT SUBSTRING('www.agileai.com',5);     Result:agileai.com

含义:从字符串第五位开始截取

SELECT SUBSTRING('www.agileai.com',-11);     Result:agileai.com

含义:从字符串尾往前截取11位

SELECT SUBSTRING('www.agileai.com',5,11);     Result:agileai.com

含义:从第五位字符开始往后截取11位 

12. REVERSE

含义:使字符串颠倒顺序。

SELECT REVERSE('moc.iaeliga.www');    Result:www.agileai.com  

数值函数

数值型函数主要是对数值型数据进行处理,得到我们想要的结果,例如ABS、BIN、CEILING、EXP、FLOOR等,大家可以在实际的数据处理过程中进行尝试,举例如下。

1. ABS

含义:返回x的绝对值。

绝对值:数轴上一个数所对应的点与原点的距离叫做该数绝对值,绝对值只能为非负数。

SELECT ABS(-24);    Result:24

2. BIN

含义:返回x的二进制。

SELECT BIN('55');    Result:110111

3. CEILING

含义:返回大于x的最小整数值。

SELECT CEILING('12.3');    Result:13

4. EXP

含义:返回值e(自然对数的底)的x次方。

e≈2.71828182845905。

SELECT EXP(2);    Result:7.38905609893065

5. FLOOR

含义:返回小于x的最大整数值。

SELECT FLOOR(4.6);    Result:4

6. GREATEST

含义:返回集合中最大的值。

SELECT GREATEST(4.6,4,23,66);    Result:66

7. LEAST

含义:返回集合中最小的值。

SELECT LEAST(4.6,4,23,66);    Result:4

8. LN

含义:返回x的自然对数。

自然对数:以e为底的对数称自然对数。

SELECT LN(2);    Result:0.6931471805599453

9. LOG

含义:返回x的以y为底的对数,该函数的单个参数版本将返x的自然对数,如果调用两个参数,它返回X的对数的任意基数B。

SELECT LOG(45);    Result:3.8066624897703196

SELECT LOG(2,65536);    Result:16

10. MOD

含义:返回x/y的余数。

SELECT MOD(10,6);    Result:4

11. PI

含义:获取圆周率。

SELECT PI();    Result:3.141593

12. RAND

含义:返回0到1内的随机值,可以通过提供一个参数使RAND()随机数生成器生成一个指定的值。

SELECT RAND();    Result:0-1之间随机数

13. ROUND

含义:返回参数x的四舍五入的有y位小数的值。

SELECT ROUND(25.789,1);   Result:25.8

14. TRUNCATE

含义:返回数字x截短为y位小数的结果。

SELECT TRUNCATE(25.7891233465,4);   Result:25.7891

比较函数

本章介绍三种在数据进行筛选时所使用的常用函数,分别是在两个区间之内、内容包含、以及空数据的处理和上述三种反向处理方式,举例如下。

1. BETWEEN...AND...

含义:筛选字段参数为某两个区间的数据。

样例:

MySQL内置函数梳理_第1张图片

2. IN

含义:筛选出在列出值范围内的数据。

样例:

MySQL内置函数梳理_第2张图片

3. NULL

含义:进行NULL判断。

样例为非空判断。

MySQL内置函数梳理_第3张图片

流程控制

流程控制类函数可以进行条件操作,用来实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台,本文介绍数据的IF判断以及CASE WHEN等操作。

1. IF

含义:如果结果是真,返回true;否则返回false。

SELECT IF(1>0,TRUE,FALSE);    Result:1

SELECT IF(1>0,'TRUE','FALSE');    Result:TRUE

2. IFNULL

含义:如果arg1不是空,返回arg1,否则返回arg2。

SELECT IFNULL(NULL,'OK');    Result:OK

3. NULLIF

含义:如果arg1=arg2返回NULL,否则返回arg1。

SELECT NULLIF('YES','NO');    Result:YES

SELECT NULLIF('8','8');    Result:NULL

4. CASE WHEN

用法:CASE WHEN[test] THEN [result]...ELSE [default] END

SELECT CASE WHEN 1>0 THEN 'TRUE' ELSE 'FALSE' END;    Result:TRUE

解读:当1>0时结果为TRUE反之为FASLE。

5. CASE

用法:CASE [test] WHEN[val1] THEN [result]...ELSE [default]END

SELECT (CASE 'YES'

         WHEN 'YES' THEN '√'

                             WHEN 'NO' THEN '×'

                             ELSE 'others'

                            END);

Result:√

解读:对YES字符串进行判定如果等于YES结果为√,如果等于NO结果为×均不等时结果为others。

日期函数

MySQL对于日期的处理方式相对来讲还是较为全面的,一般情况笔者还是习惯用DATE_FORMAT来进行日期的格式化,但是MySQL里内置了很多有关日期的处理的函数,例如DAY、MONTH、YEAR等,下面笔者对SQL中常用的日期函数进行类举。

1. CURTIME

含义:获取当前时间时分秒。

select curtime();    Result:14:05:48

2. NOW

含义:获取当前系统年月日时间。

SELECT NOW();    Result:2019-12-28 14:02:13

3. YEAR

含义:获取时间字段的年。

select YEAR(NOW());    Result:2019

4. QUARTER

含义:获取时间字段所在季度。

select QUARTER(NOW());   Result:4

5. MONTH

含义:获取时间字段所在月份。

select MONTH(NOW());   Result:12

6. WEEK

含义:获取时间字段所在星期。

select WEEK(NOW());   Result:51

7. DAY

含义:获取时间字段所在天。

select DAY(NOW());   Result:28

8. DATE

含义:获取时间字段的年月日。

select DATE(NOW());    Result:2019-12-28

9. TIME

含义:获取时间字段的时分秒。

select TIME(NOW());    Result:14:18:56

10. HOUR

含义:获取时间字段所在小时。

select HOUR(NOW());   Result:14

11. MINUTE

含义:获取时间字段所在分钟。

select MINUTE(NOW());   Result:34

12. SECOND

含义:获取时间字段所在秒。

select SECOND(NOW());   Result:34

13. LAST_DAY

含义:返回月份中的最后一天。

select LAST_DAY(NOW());   Result:2019-12-31

14. DATE_ADD

含义:根据日期进行计算。

select date_add(NOW(), interval 1 day);   Result:2019-12-29 15:12:22    

select date_add(NOW(), interval 1 hour);   Result:2019-12-28 16:12:22

select date_add(NOW(), interval 1 minute);   Result:2019-12-28 15:13:22

select date_add(NOW(), interval 1 second);   Result:2019-12-28 15:12:23

select date_add(NOW(), interval 1 week);   Result:2020-01-04 15:12:22

select date_add(NOW(), interval 1 month);   Result:2020-01-28 15:12:22

select date_add(NOW(), interval 1 quarter);   Result:2020-03-28 15:12:22

select date_add(NOW(), interval 1 year);   Result:2020-12-28 15:12:22

select date_add(NOW(), interval -1 day);   Result:2019-12-27 15:12:22

15. DATEDIFF

含义:时间计算,两个日期相减精确到天。

select DATEDIFF('2019-12-28','2019-11-28');   Result:30

select DATEDIFF('2019-11-28','2019-12-28');   Result:-30

16. TIMEDIFF

含义:时间计算,两个日期相减精确到小时。

select TIMEDIFF('2019-12-28 15:12:23','2019-11-28 15:12:22');   Result:720:00:01

17. STR_TO_DATE

含义:将字符串转换成时间。

select STR_TO_DATE('2019/12/28','%Y/%m/%d');   Result:2019-12-28

18. DATE_FORMAT

含义:将时间转换成字符串。

select DATE_FORMAT(NOW(),'%Y-%m-%d');   Result:2019-12-28

聚合函数

聚合函数又称组函数,一般情况下,我们需要的聚合数据(总和、平均数、最大值、最小值)等并不总是存储在表中,但是我们可以通过执行聚合函数来获取它。本文将总结在日常数据操作时常用的相关函数,样例如下。

注意:聚合函数不允许出现嵌套。

1. COUNT

含义:统计数据量。

SELECT COUNT(*) FROM personnel;   Result:获取personnel表内有多少条数据

2. MAX

含义:获取最大值。

SELECT MAX(PER_SORT) FROM personnel;   Result:获取PER_SORT字段的最大值

3. MIN

含义:获取最小值。

SELECT MIN(PER_SORT) FROM personnel;   Result:获取PER_SORT字段的最小值

4. SUM

含义:对数据进行汇总求和。

SELECT SUM(PER_SORT) FROM personnel;  Result:对PER_SORT字段进行求和

5. AVG

含义:求平均值。

SELECT AVG(PER_SORT) FROM personnel;  Result:对PER_SORT字段进行求平均值

6. GROUP_CONCAT

含义:将分组的数据进行展示,该函数返回带有来自一个组的连接的非NULL 值的字符串结果。

SELECT  COUNT(PER_STATE),  PER_STATE,  GROUP_CONCAT(PER_NAME)

FROM  personnel  WHERE 1 = 1

GROUP BY PER_STATE;

效果展示:

信息函数

MySQL信息函数主要是对系统信息进行查看例如获取数据库版本号信息、连接ID、获取当前数据库、最后插入记录的ID及当前的用户信息进行查看。

1. VERSION

含义:获取当前数据库版本信息。

SELECT VERSION();   Result:5.7.19-log

2. USER

含义:获取当前用户信息。

SELECT USER();   Result:root@localhost

3. DATABASE

含义:获取当前数据库。

SELECT DATABASE();   Result:aeai_mdm

4. CONNECTION_ID

含义:获取连接ID。

SELECT CONNECTION_ID();   Result:6

5. LAST_INSERT_ID

含义:自动返回最后一个INSERT或 UPDATE 问询为 AUTO_INCREMENT列设置的第一个 发生的值。。

SELECT LAST_INSERT_ID();   Result:0

6. PROCESSLIST

含义:查看数据库进程。

SHOW PROCESSLIST;

MySQL内置函数梳理_第4张图片

7. KILL

含义:杀死进程。

KILL PROCESS_ID;

近期工作一直围绕数据治理分析项目来开展,由于时间原因一直未对SQL函数进行有效梳理与文档输出,导致有部分长时间未使用的函数被遗忘,通过撰写本篇文档再次认识到日常随笔、文档的重要性,文档帮助自己梳理了逻辑,将知识点进行有效积淀,自己的认知也不断的提升,慢慢的发掘文档是自身知识的输出,也渐渐的习惯让文档成为自身知识的备案。

你可能感兴趣的:(技术文档)