目录


前言

一、函数分类

二、单行函数

1.数值函数

2.字符串函数

3.日期函数

三、聚合函数

四、WHERE和HAVING的对比

总结


前言

        博主最近在使用MySQL时总是会忘记一些内置函数或者聚合函数的用法,决定今天给它来个大总结!也方便小伙伴们遗忘时查阅(建议crtl+f 食用)

MySQL语句如何实现分类求和 mysql函数分类_mysql

 

一、函数分类

        从函数定义的角度出发,我们可以将函数分成 内置函数 自定义函数

        MySQL提供的内置函数从 实现的功能角度 可以分为数值函数字符串函数日期时间函数流程控制函数加密与解密函数获取MySQL信息函数聚合函数等。这里,我将这些丰富的内置函数再分为两类: 单行函数聚合函数(或分组函数)

二、单行函数

           特点:操作数据对象,接受参数返回一个结果,只对一行进行变换,每行返回一个结果,可以嵌套,参数可以是一列或一个值。

1.数值函数

基本函数如下:

函数名称

大致用法

ABS(x)

返回x的绝对值

SIGN(X)

返回X的符号。正数返回1,负数返回-1,0返回0

PI()

返回圆周率的值

CEIL(x)

CEILING(x) 返回大于或等于某个值的最小整数

FLOOR(x)

返回小于或等于某个值的最大整数

LEAST(e1,e2,e3…)

返回列表中的最小值

GREATEST(e1,e2,e3…)

返回列表中的最大值

MOD(x,y)

返回X除以Y后的余数

RAND()

返回0~1的随机值

ROUND(x)

返回一个对x的值进行四舍五入,最接近于X的整数

TRUNCATE(x,y)

返回数字x截断为y位小数的结果

SQRT(x)

返回x的平方根。当X的值为负数时,返回NULL

RADIANS(x)

将角度转化为弧度,其中,参数x为角度值

DEGREES(x)

将弧度转化为角度,其中,参数x为弧度值

代码如下(示例):

SELECT
ABS(-123),ABS(32),SIGN(-23),SIGN(43),PI(),CEIL(32.32),CEILING(-43.23),FLOOR(32.32),
FLOOR(-43.23),MOD(12,5)
FROM DUAL;

MySQL语句如何实现分类求和 mysql函数分类_sql_02


三角函数如下:

函数名称

用法

SIN(x)

返回x的正弦值,其中,参数x为弧度值

ASIN(x)

获取正弦为x的值。如果x的值不在-1到1之间,则返回NULL

COS(x)

返回x的余弦值,其中,参数x为弧度值

ACOS(x)

获取余弦为x的值。如果x的值不在-1到1之间,则返回NULL

TAN(x)

返回x的正切值,其中,参数x为弧度值

ATAN(x)

返回x的反正切值,即返回正切值为x的值

ATAN2(m,n)

回两个参数的反正切值

COT(x)

返回x的余切值,其中,X为弧度值


算数函数为:

函数

用法

POW(x,y)

POWER(X,Y) 返回x的y次方

EXP(X)

返回e的X次方,其中e是一个常数,2.718281828459045

LN(X)

返回e的X次方,其中e是一个常数,2.718281828459045

LOG10(X)

返回以10为底的X的对数,当X <= 0 时,返回的结果为NULL

LOG2(X)

返回以2为底的X的对数,当X <= 0 时,返回NULL


进制转换函数:

函数

用法

BIN(x)

返回x的二进制编码

HEX(x)

返回x的十六进制编码

OCT(x)

返回x的八进制编码

CONV(x,f1,f2)

返回f1进制数变成f2进制数


2.字符串函数

函数

用法

ASCII(S)

返回字符串S中的第一个字符的ASCII码值

CHAR_LENGTH(s)

返回字符串s的字符数。和CHARACTER_LENGTH(s)相同

LENGTH(s)

返回字符串s的字节数,和字符集有关

CONCAT(s1,s2,......,sn)

连接s1,s2,......,sn为一个字符串

INSERT(str,idx,len,replacestr)

将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr

REPLACE(str, a, b)

用字符串b替换字符串str中所有出现的字符串a

UPPER(s) 或 UCASE(s)

将字符串s的所有字母转成大写字母

LOWER(s) 或LCASE(s)

将字符串s的所有字母转成小写字母

LEFT(str,n)

返回字符串str最左边的n个字符

RIGHT(str,n)

返回字符串str最右边的n个字符

LPAD(str, len, pad)

用字符串pad对str最左边进行填充,直到str的长度为len个字符

RPAD(str ,len, pad)

用字符串pad对str最右边进行填充,直到str的长度为len个字符

LTRIM(s)

掉字符串s左侧的空格

TRIM(s)

去掉字符串s开始与结尾的空格

TRIM(s1 FROM s) 

去掉字符串s开始与结尾的s1

TRIM(TRAILING s1 FROM s)

去掉字符串s结尾处的s1

REPEAT(str, n) 

返回str重复n次的结果

SPACE(n) 

返回n个空格

STRCMP(s1,s2)

比较字符串s1,s2的ASCII码值的大小

SUBSTR(s,index,len)

返回从字符串s的index位置其len个字符,作用与SUBSTRING(s,n,len)、

MID(s,n,len)相同

LOCATE(substr,str)

返回字符串substr在字符串str中首次出现的位置,作用于POSITION(substr

IN str)、INSTR(str,substr)相同。未找到,返回0

ELT(m,s1,s2,…,sn)

返回指定位置的字符串,如果m=1,则返回s1,如果m=2,则返回s2,如

果m=n,则返回sn

FIELD(s,s1,s2,…,sn) 

返回字符串s在字符串列表中第一次出现的位置

REVERSE(s) 

返回s反转后的字符串


3.日期函数

CURDATE() ,CURRENT_DATE()

返回当前日期,只包含年、

月、日

CURTIME() , CURRENT_TIME()

返回当前时间,只包含时、

分、秒

NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() /LOCALTIMESTAMP()

返回当前系统日期和时间

UTC_DATE()

返回UTC(世界标准时间)日期

UTC_TIME()

返回UTC(世界标准时间

时间

CURDATE() 

CURRENT_DATE()返回当前日期,只包含年、月、日

CURTIME() , CURRENT_TIME()

返回当前时间,只包含时、

分、秒

NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() /LOCALTIMESTAMP()

 

返回当前系统日期和时间

UTC_DATE()

返回UTC(世界标准时间)日期

UTC_TIME()

返回UTC(世界标准时间

时间

YEAR(date) / MONTH(date) / DAY(date) 

返回具体的日期值

HOUR(time) / MINUTE(time) /SECOND(time)

返回具体的时间值

MONTHNAME(date) 

返回月份:January,...

DAYNAME(date) 

返回星期几:MONDAY,TUESDAY.....SUNDAY

WEEKDAY(date) 

返回周几,注意,周1是0,周2是1,。。。周日是6

QUARTER(date) 

返回日期对应的季度,范围为1~4

WEEK(date) 

WEEKOFYEAR(date) 返回一年中的第几周

DAYOFYEAR(date)

返回日期是一年中的第几天

DAYOFWEEK(date)

注意:周日是1,周一是2,周六是7

         时间和秒钟转换的函数:

TIME_TO_SEC(time)

将 time 转化为秒并返回结果值。转化的公式为: 小时*3600+分钟*60+秒

SEC_TO_TIME(seconds) 

将 seconds 描述转化为包含小时、分钟和秒的时间

ADDTIME(time1,time2)

返回time1加上time2的时间。当time2为一个数字时,代表的是秒 ,可以为负数

SUBTIME(time1,time2)

返回time1减去time2后的时间。当time2为一个数字时,代表的

是 秒 ,可以为负数

DATEDIFF(date1,date2) 

返回date1 - date2的日期间隔天数

TIMEDIFF(time1, time2) 

返回time1 - time2的时间间隔

FROM_DAYS(N) 

返回从0000年1月1日起,N天以后的日期

TO_DAYS(date) 

返回日期date距离0000年1月1日的天数

MAKEDATE(year,n)

针对给定年份与所在年份中的天数返回一个日期

MAKETIME(hour,minute,second) 

将给定的小时、分钟和秒组合成时间并返回

PERIOD_ADD(time,n)

返回time加上n后的时间


三、聚合函数

        聚合(或聚集、分组)函数是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。

  • AVG和SUM函数  可以对数值型数据使用AVG 和 SUM 函数。
  • MIN和MAX函数   可以对任意数据类型的数据使用 MIN 和 MAX 函数。
  • COUNT函数  COUNT(*)返回表中记录总数,适用于任意数据类型

四、WHERE和HAVING的对比

  • 区别1:WHERE 可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件;HAVING 必须要与 GROUP BY 配合使用,可以把分组计算的函数和分组字段作为筛选条件。这决定了,在需要对数据进行分组统计的时候,HAVING 可以完成 WHERE 不能完成的任务。这是因为,在查询语法结构中,WHERE 在 GROUP BY 之前,所以无法对分组结果进行筛选。HAVING 在 GROUP BY 之后,可以使用分组字段和分组中的计算函数,对分组的结果集进行筛选,这个功能是 WHERE 无法完成的。另外,WHERE排除的记录不再包括在分组中。
  • 区别2:如果需要通过连接从关联表中获取需要的数据,WHERE 是先筛选后连接,而 HAVING 是先连接后筛选。 这一点,就决定了在关联查询中,WHERE 比 HAVING 更高效。因为 WHERE 可以先筛选,用一个筛选后的较小数据集和关联表进行连接,这样占用的资源比较少,执行效率也比较高。HAVING 则需要先把结果集准备好,也就是用未被筛选的数据集进行关联,然后对这个大的数据集进行筛选,这样占用的资源就比较多,执行效率也较低

WHERE 

先筛选数据再关联,执行效率高 不能使用分组中的计算函数进行筛选

HAVING 

可以使用分组中的计算函数 在最后的结果集中进行筛选,执行效率较低


总结

        大家在写SQL语句时,如果忘记某个函数了,欢迎到这里来查询,制作不易,不要白嫖哦,一起加油。有什么疑问,欢迎留言。我是莱纳,梦想成为靠自己而精彩的人。

万水千山总是情,点个赞赞行不行,感谢你读到这里鸭!

MySQL语句如何实现分类求和 mysql函数分类_mysql_03