0


MYSQL——函数汇总


前言

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

一、函数分类

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

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

二、单行函数

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

1.数值函数

基本函数如下:
函数名称大致用法ABS(x)返回x的绝对值SIGN(X)返回X的符号。正数返回1,负数返回-1,0返回0PI()返回圆周率的值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的值为负数时,返回NULLRADIANS(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;


三角函数如下:
函数名称用法SIN(x)返回x的正弦值,其中,参数x为弧度值ASIN(x)获取正弦为x的值。如果x的值不在-1到1之间,则返回NULLCOS(x)返回x的余弦值,其中,参数x为弧度值ACOS(x)获取余弦为x的值。如果x的值不在-1到1之间,则返回NULLTAN(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.718281828459045LN(X)返回e的X次方,其中e是一个常数,2.718281828459045LOG10(X)返回以10为底的X的对数,当X <= 0 时,返回的结果为NULLLOG2(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个字符长的子串替换为字符串replacestrREPLACE(str, a, b)用字符串b替换字符串str中所有出现的字符串aUPPER(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开始与结尾的s1TRIM(TRAILING s1 FROM s)去掉字符串s结尾处的s1REPEAT(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)相同。未找到,返回0ELT(m,s1,s2,…,sn)返回指定位置的字符串,如果m=1,则返回s1,如果m=2,则返回s2,如
果m=n,则返回snFIELD(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.....SUNDAYWEEKDAY(date) 返回周几,注意,周1是0,周2是1,。。。周日是6QUARTER(date) 返回日期对应的季度,范围为1~4WEEK(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语句时,如果忘记某个函数了,欢迎到这里来查询,制作不易,不要白嫖哦,一起加油。有什么疑问,欢迎留言。我是莱纳,梦想成为靠自己而精彩的人。

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

标签: sql 数据库 mysql

本文转载自: https://blog.csdn.net/weixin_58177940/article/details/124397460
版权归原作者 莱纳。 所有, 如有侵权,请联系我们删除。

“MYSQL&mdash;&mdash;函数汇总”的评论:

还没有评论