数学函数
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'); |