前言
函数,将常用的功能整合封装在一个函数定义中,通过函数调用方式,执行所封装的代码逻辑。
函数具有的很强的功能性和复用性。
MySQL作为一款强大、流行的数据库,本身包含着大量并且丰富的内置函数。我们可以使用这些内置的函数,对检索出来的数据进行值或格式上的转换。
MySQL函数会对传递进来的参数进行处理,并返回一个处理结果,也就是返回一个值。
在我们常用的范围中,如果按针对数据行或者结果集处理来区分,MySQL的函数可以分为两大类:数据处理函数和聚集函数。
这篇文章是自己的学习总结,总结汇总下这部分的内容。
内容
数据处理函数
MySQL的内置函数中,包含这么一类函数:在每一行数据上执行,对数据进行转换和处理。这一类函数称为数据处理函数。
根据处理的数据的数据类型区分又可以分类为:文本处理函数、日期和时间处理函数、数值处理函数。
文本处理函数
文本处理函数用于处理文本串,对文本串进行长度返回、大小写转换、子串查找等常见的文本数据操作。常用的包括:
| 函数 | 说明 | 函数 | 说明 |
|---|---|---|---|
Left() | 返回串左边的字符 | Right() | 返回串右边的字符 |
LTrim() | 去掉串左边的空格 | RTrim() | 去掉串右边的空格 |
SubString() | 返回子串的字符 | Locate() | 找出串的一个子串 |
Upper() | 将串转换为大写 | Lower() | 将串转换为小写 |
Length() | 返回串的长度 | Soundex() | 返回串的SOUNDEX值 |
日期和时间处理函数
日期和时间处理函数用于处理日期和时间值并从这些值中提取特定成分的日期和时间。常用的包括:
| 函数 | 说明 | 函数 | 说明 |
|---|---|---|---|
AddDate() | 增加一个日期(天、周等) | AddTime() | 增加一个时间(时、分等) |
CurDate() | 返回当前日期 | CurTime() | 返回当前时间 |
Date() | 返回日期时间的日期部分 | DateDiff() | 计算两个日期之差 |
Date_Add() | 高度灵活的日期运算函数 | Date_Format() | 返回一个格式化的日期或时间串 |
Day() | 返回一个日期的天数部分 | DayOfWeek() | 对于一个日期,返回对应的星期几 |
Hour() | 返回一个时间的小时部分 | Minute() | 返回一个时间的分钟部分 |
Month() | 返回一个日期的月份部分 | Now() | 返回当前日期和时间 |
Second() | 返回一个时间的秒部分 | Time() | 返回一个日期时间的时间部分 |
Year() | 返回一个日期的年份部分 |
数值处理函数
数值处理函数用于在数值数据上进行算术操作。常用的包括:
| 函数 | 说明 | 函数 | 说明 |
|---|---|---|---|
Abs() | 返回一个数的绝对值 | Tan() | 返回一个角度的正切 |
Cos() | 返回一个角度的余弦 | Sin() | 返回一个角度的正弦 |
Exp() | 返回一个数的指数值 | Mod() | 返回除操作的余数 |
Pi() | 返回圆周率 | Rand() | 返回一个随机数 |
Sqrt() | 返回一个数的平方根 |
聚集函数
上面的数据处理函数,在执行上是针对每一行数据的,但是这种方式不总是能够满足我们的需求。在需求统计的数据的情况下(例如:汇总数据获取数据集合的某个字段的平均值),我们需要的,是在行组(或者可以成为结果集或者子结果集)上执行相对应的计算和转换,而不是对每一行数据执行单独的计算。这个时候,我们就要使用聚集函数.
聚集函数(aggregate function)是一种运行在行组上,计算和返回单个值的函数。它的执行目标是行组,而不是单独的每一个行,得到的是一个汇总数据。
常用的聚集函数包括:
| 函数 | 说明 | 函数 | 说明 |
|---|---|---|---|
AVG() | 返回某列的平均值 | MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 | SUM() | 返回某列值之和 |
COUNT() | 返回某列的行数 |
聚集函数在使用上有如下特点:
-
上面的聚集函数会忽略列值为
NULL的行,不对这个行进行聚合汇总计算; -
COUNT()支持关键词星号*的使用,使用COUNT(*)对表中的行进行计数,获取表的行数; -
通过使用
DISTINCT关键词(如果不指定,就是默认ALL关键词),结果集会被过滤成包含不同值的结果集,接着再执行聚合函数计算;
# 获取表的行数
SELECT COUNT(*) FROM [table_name];
# 获取表的列的平均值
SELECT AVG([column_name]) FROM [table_name];
# 获取表的列值的类型个数
SELECT COUNT(DISTINCT [column_name]) FROM [table_name];
参考资料
-
《MySQL必知必会》