MySQL函数

数学函数

MySQL Math函数及其描述如下:

名称 描述
ABS(n) 返回数字n的绝对值
CEIL(n) 向上取整,即返回大于或等于输入数字(n)的最小整数值
FLOOR(x) 向下取整,即返回取不大于x的最大整数
MOD(n,m) 返回n 除以 m 的余数
ROUND(n) 将数字四舍五入到指定的小数位数
TRUNCATE(x,y) 返回数字x截短为y位小数的结果
ACOS(n) 返回n的反余弦值;如果n不在-1和1范围内,则返回null
ASIN(n) 返回n的反正弦值,n是正弦值为n的值。如果n不在-1到1的范围内,则返回null
ATAN(n) 返回n的反正切
ATAN2(n,m),ATAN(m,n) 返回两个变量n和m的反正切
CONV(n,from_base,to_base) 在不同的数字基数之间转换数字
COS(n) 返回n的余弦,其中n以弧度为单位
COT(n) 返回n的余切
CRC32(n) 计算循环冗余校验值并返回32位无符号值
DEGREES(n) 将弧度转换为参数n的度
EXP(n) 此函数返回e(自然对数的底)到n次方的值
LN(n) 返回n的自然对数
LOG(m,n) / log(n) 返回单个参数版本将返回X的自然对数,如果调用两个参数,它返回以m为底n的对数
LOG10(n) 返回参数n的以10为底的对数
LOG2(n) 返回参数n的以2为底的对数
PI() 返回PI的值
POW(x,y) 函数用于计算 x 的 y 次方
POWER(x,y) 返回函数用于计算 x 的 y 次方
RADIANS(n) 返回参数转换为弧度
RAND() 返回一个随机浮点值
SIGN(n) 根据n是负数,零还是正数,返回可以为-1、0或1的n的符号
SIN(n) 返回n的正弦
SQRT(n) 返回n的平方根
tan(n) 返回n的切线

聚合函数

聚合函数对多个值执行计算并返回单个值。

例如,可以使用AVG()采用多个数字并返回数字平均值的合计函数。

下面说明了聚合函数的语法:

function_name(DISTINCT | ALL expression)

使用以下语法:

  • 首先,指定聚合函数的名称,例如AVG()。请参阅以下部分中的聚合函数列表。
  • 其次,如果要基于不同的值进行计算前面加DISTINCT,或者ALL要计算所有值(包括重复项)。默认值为ALL
  • 第三,expression可以是列的表达式,也可以是涉及列和算术运算符的表达式。

聚合函数通常与GROUP BY子句一起使用,来计算每个组的聚合值,例如,可以按组的计算平均值或每个组中值的总和。

MySQL支持以下聚合函数:

汇总功能 描述
AVG() 返回非空值的平均值
BIT_AND() 按位返回AND
BIT_OR() 按位返回OR
BIT_XOR() 返回按位异或
COUNT() 返回组中的行数,包括具有NULL值的行
GROUP_CONCAT() 返回一个串联的字符串
JSON_ARRAYAGG() 将结果集作为单个JSON数组返回
JSON_OBJECTAGG() 返回结果集作为单个JSON对象
MAX() 返回一组非NULL值中的最大值(最大值)
MIN() 返回一组非NULL值中的最小值(最小值)
STDEV() 返回总体标准偏差
STDDEV_POP() 返回总体标准偏差
STDDEV_SAMP() 返回样品标准偏差
SUM() 返回一组所有非NULL值的总和
VAR_POP() 返回总体标准方差
VARP_SAM() 返回样本方差
VARIANCE() 返回总体标准方差

这里以AVG举例,其他函数类似。

AVG()函数计算一组值的平均值。它在计算中会忽略NULL。

AVG(expression)

例如,可以使用此AVG函数products通过使用以下查询来计算表中所有产品的平均购买价格:

SELECT 
    AVG(buyPrice) average_buy_price
FROM 
    products;

以下示例使用该AVG()函数来计算每个产品线的平均购买价格:

SELECT 
    productLine, 
    AVG(buyPrice)
FROM
    products
GROUP BY productLine
ORDER BY productLine;

字符串函数

名称 描述
CONCAT 将两个或多个字符串连接成一个字符串
INSTR 返回子字符串在字符串中首次出现的位置
LENGTH 获取字符串的长度(以字节和字符为单位)
LOWER 将字符串转换为小写
UPPER 将字符串转换为大写
REPLACE 搜索并替换字符串中的子字符串
LEFT 从字符串中获取指定数量的最左边字符
RIGHT 从字符串中获取指定数量的最右边的字符
TRIM 从字符串中删除不需要的字符
RTRIM 从字符串中删除所有尾随空格
LTRIM 从字符串中删除所有前导空格
SUBSTRING 从具有特定长度的位置开始提取子字符串。
SUBSTRING_INDEX 在指定的定界符出现之前从字符串中返回一个子字符串
FIND_IN_SET 在以逗号分隔的字符串列表中查找字符串
FORMAT 格式化具有特定语言环境的数字,四舍五入到小数位数

日期和时间函数

函数名称 描述 示例
CURDATE()
CURRENT_DATE()
返回当前的日期
CURTIME()
CURRENT_TIME()
返回当前的时间
DATE_ADD(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化) SELECT DATE_ADD ( CURRENT_DATE ,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt) 依照指定的fmt格式格式化日期date值 计算年龄:SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)),'%Y')+0 AS age FROM employee;
DATE_SUB(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格化) SELECT DATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
DAYOFWEEK(date) 返回date所代表的一星期中的第几天(1~7)
DAYOFMONTH(date) 返回date是一个月的第几天(1~31)
DAYOFYEAR(date) 返回date是一年的第几天(1~366)
DAYNAME(date) 返回date的星期名 SELECT DAYNAME(CURRENT_DATE);
FROM_UNIXTIME(ts,fmt) 根据指定的fmt格式,格式化UNIX时间戳ts SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
HOUR(time) 返回time的小时值(0~23)
MINUTE(time) 返回time的分钟值(0~59)
MONTH(date) 返回date的月份值(1~12)
MONTHNAME(date) 返回date的月份名 SELECT MONTHNAME(CURRENT_DATE);
NOW() 返回当前的日期和时间
QUARTER(date) 返回date在一年中的季度(1~4) SELECT QUARTER(CURRENT_DATE);
WEEK(date) 返回日期date为一年中第几周(0~53)
YEAR(date) 返回日期date的年份(1000~9999)

控制流函数

控制流函数是用来进行条件操作的,这些函数可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台。

MySQL控制流函数:

格式 描述 示例
CASE WHEN [conditional test 1] THEN [result 1] WHEN [conditional test 2] THEN [result 2] ELSE [default result] END 如果testN是真,则返回resultN,否则返回default
CASE [test] WHEN[val1] THEN [result]...ELSE [default]END 如果test和valN相等,则返回resultN,否则返回default
IF(test,t,f) 如果test是真,返回t;否则返回f SELECT IF( 1<10,2,3 ) , IF(56>100, 'true', 'false' );
IFNULL(arg1,arg2) 如果arg1不是空,返回arg1,否则返回arg2 SELECT IFNULL(1,2), IFNULL(NULL,10) ,IFNULL(4*NULL,'false');
NULLIF(arg1,arg2) 如果arg1=arg2返回NULL;否则返回arg1 SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);

CASE函数的格式有些复杂,通常如下所示:

CASE [expression to be evaluated]
WHEN [val 1] THEN [result 1]
WHEN [val 2] THEN [result 2]
WHEN [val 3] THEN [result 3]
......
WHEN [val n] THEN [result n]
ELSE [default result]
END

CASE函数还有另外一种句法,有时使用起来非常方便,如下:

CASE
WHEN [conditional test 1] THEN [result 1]
WHEN [conditional test 2] THEN [result 2]
ELSE [default result]
END

格式化函数

函数名称 描述说明
DATE_FORMAT(date,fmt) 依照字符串fmt格式化日期date值
FORMAT(x,y) 把x格式化为以逗号隔开的数字序列,y是结果的小数位数
INET_ATON(ip) 返回IP地址的数字表示
INET_NTOA(num) 返回数字所代表的IP地址
TIME_FORMAT(time,fmt) 依照字符串fmt格式化时间time值

其中最简单的是FORMAT()函数,它可以把大的数值格式化为以逗号间隔的易读的序列。

示例:

SELECT FORMAT(34234.34323432,3);
SELECT DATE_FORMAT(NOW(),'%W,%D %M %Y %r');
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
SELECT DATE_FORMAT(19990330,'%Y-%m-%d');
SELECT DATE_FORMAT(NOW(),'%h:%i %p');
SELECT INET_ATON('10.122.89.47');
SELECT INET_NTOA(175790383);

类型转化函数

为了进行数据类型转化,MySQL提供了CAST()函数,它可以把一个值转化为指定的数据类型。类型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
示例:

SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);

其他函数

函数名称 描述说明 示例
DATABASE() 返回当前数据库名 SELECT DATABASE(),VERSION(),USER();
BENCHMARK(count,expr) 将表达式expr重复运行count次 SELECT BENCHMARK(9999999,LOG(RAND()PI()));#该例中,计算LOG(RAND()PI())表达式9999999次
CONNECTION_ID() 返回当前客户的连接ID SELECT CONNECTION_ID();
FOUND_ROWS() 返回最后一个SELECT查询进行检索的总行数 SELECT FOUND_ROWS();
USER()或SYSTEM_USER() 返回当前登陆用户名 SELECT USER();
VERSION() 返回MySQL服务器的版本 SELECT VERSION();
AES_ENCRYPT(str,key) 返回用密钥key对字符串str利用高级加密标准算法加密后的结果,调用AES_ENCRYPT的结果是一个二进制字符串,以BLOB类型存储 SELECT AES_ENCRYPT('root','key');
AES_DECRYPT(str,key) 返回用密钥key对字符串str利用高级加密标准算法解密后的结果 SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key');
DECODE(str,key) 使用key作为密钥解密加密字符串str SELECT DECODE(ENCODE('xufeng','key'),'key');#加解密放在一起
ENCRYPT(str,salt) 使用UNIXcrypt()函数,用关键词salt(一个可以惟一确定口令的字符串,就像钥匙一样)加密字符串str SELECT ENCRYPT('root','salt');
ENCODE(str,key) 返回编码后结果 SELECT ENCODE('xufeng','key');
MD5() 计算字符串str的MD5校验和 SELECT MD5('123456');
PASSWORD(str) 返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法。 PASSWORDSHA('123456');
SHA() 计算字符串str的安全散列算法(SHA)校验和 SELECT SHA('123456');
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容