MySQL 是一种关系型数据库管理系统,它提供了一些内置的数学函数,可以用来进行函数运算。MySQL 数学函数可以用来计算平均值、最大值、最小值、总和、标准差、方差以及其他常见的数学运算。
MySQL 数学函数的使用非常方便,只需要在 SQL 语句中使用相应的函数即可实现对数据的运算。下面是一些常见的 MySQL 数学函数:
AVG() 函数:计算某列中所有非 NULL 值的平均值。 MAX() 函数:获取某列中最大值。 MIN() 函数:获取某列中最小值。 SUM() 函数:获取某列中所有非 NULL 值的总和。 STDDEV() 函数:获取某列中所有非 NULL 值的标准差。 VARIANCE() 函数:获取某列中所有非 NULL 值的方差。 ROUND() 函数:对一个表达式或者一个字段四舍五入保留小数位。 CEILING() 函数:对一个表达式或者一个字段向上舍入保留小数位。 FLOOR() 函数:对一个表达式或者一个字段向下舍入保留小数位。 ABS() 函数:返回表达式或者字段的绝对值。 MOD() 函MySQL 数学函数
所有的数学函数在发生错误的情况下,均返回
NULL
。
-
元减。改变参数的符号 mysql> SELECT - 2; -> -2注意,如果这个操作符被用于一个BIGINT
,返回值也是一个BIGINT
!这就意味着,应该避免在一个可能有值-2^63
的整数上使用-
操作符!ABS(X)
返回X
的绝对值: mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32这个函数可安全地使用于BIGINT
值。SIGN(X)
以-1
、0
或1
方式返回参数的符号,它取决于参数X
是负数、0 或正数。 mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1MOD(N,M)
% 取模 (就如 C 中的%
操作符)。返回N
被M
除后的余数: mysql> SELECT MOD(234, 10); -> 4 mysql> SELECT 253 % 7; -> 1 mysql> SELECT MOD(29,9); -> 2 mysql> SELECT 29 MOD 9; -> 2这个函数可安全地使用于BIGINT
值。最后一个示例可在 MySQL 4.1 中工作。FLOOR(X)
返回不大于X
的最大整数值: mysql> SELECT FLOOR(1.23); -> 1 mysql> SELECT FLOOR(-1.23); -> -2注意,返回值被转换为一个BIGINT
!CEILING(X)
返回不小于X
的最小整数: mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEILING(-1.23); -> -1注意,返回值被转换为一个BIGINT
!
ROUND(X)
ROUND(X,D)
将参数X
四舍五入到最近的整数,然后返回。两个参数的形式是将一个数字四舍五入到D
个小数后返回。 mysql> SELECT ROUND(-1.23); -> -1 mysql> SELECT ROUND(-1.58); -> -2 mysql> SELECT ROUND(1.58); -> 2 mysql> SELECT ROUND(1.298, 1); -> 1.3 mysql> SELECT ROUND(1.298, 0); -> 1注意,当参数在两个整数之间时,ROUND()
的行为取决于 C 库的实现。某些取整到最近的偶数,总是向下取,总是向上取,也可能总是接近于零。如果你需要某种取整类型,应该使用一个明确定义的函数比如TRUNCATE()
或FLOOR()
代替。DIV
整除。类似于FLOOR()
,但是它可安全地用于BIGINT
值。 mysql> SELECT 5 DIV 2 -> 2DIV
在 MySQL 4.1.0 中新加入。EXP(X)
返回值e
(自然对数的底) 的X
次方: mysql> SELECT EXP(2); -> 7.389056 mysql> SELECT EXP(-2); -> 0.135335LN(X)
返回X
的自然对数: mysql> SELECT LN(2); -> 0.693147 mysql> SELECT LN(-2); -> NULL这个函数在 MySQL 4.0.3 被新加入。在 MySQL 中,它是LOG(X)
的同义词。LOG(X)
LOG(B,X)
如果以一个参数调用,它返回X
的自然对数: mysql> SELECT LOG(2); -> 0.693147 mysql> SELECT LOG(-2); -> NULL如果以两个参数调用,这个函数返回X
任意底B
的对数:mysql> SELECT LOG(2,65536); -> 16.000000 mysql> SELECT LOG(1,100); -> NULL任意底选项在 MySQL 4.0.3 中被加入。LOG(B,X)
等价于LOG(X)/LOG(B)
。LOG2(X)
返回X
的以 2 为底的对数: mysql> SELECT LOG2(65536); -> 16.000000 mysql> SELECT LOG2(-100); -> NULLLOG2()
通常可以用于计数出一个数字需要多少个比特位用于存储它。这个函数在 MySQL 4.0.3 中被添加。在更早的版本中,可以使用LOG(X)/LOG(2)
来代替它。
LOG10(X)
返回X
以 10 为底的对数: mysql> SELECT LOG10(2); -> 0.301030 mysql> SELECT LOG10(100); -> 2.000000 mysql> SELECT LOG10(-100); -> NULLPOW(X,Y)
POWER(X,Y)
返回X
的Y
幂: mysql> SELECT POW(2,2); -> 4.000000 mysql> SELECT POW(2,-2); -> 0.250000SQRT(X)
返回X
的非否平方根: mysql> SELECT SQRT(4); -> 2.000000 mysql> SELECT SQRT(20); -> 4.472136PI()
返回 PI 值(圆周率)。缺少显示 5 位小数,但是在 MySQL 内部,为 PI 使用全部的双精度。 mysql> SELECT PI(); -> 3.141593 mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116COS(X)
返回X
的余弦,在这里,X
以弧度给出: mysql> SELECT COS(PI()); -> -1.000000SIN(X)
返回X
的正弦,在这里,X
以弧度给出: mysql> SELECT SIN(PI()); -> 0.000000TAN(X)
返回X
的正切,在这里,X
以弧度给出: mysql> SELECT TAN(PI()+1); -> 1.557408ACOS(X)
返回X
的反余弦,更确切地说,返回余弦值为X
的值。如果X
不在-1
到1
之间的范围内,返回NULL
: mysql> SELECT ACOS(1); -> 0.000000 mysql> SELECT ACOS(1.0001); -> NULL mysql> SELECT ACOS(0); -> 1.570796ASIN(X)
返回X
的反正弦,更确切地说,返回正弦值为X
的值。如果X
不在-1
到1
之间的范围内,返回NULL
: mysql> SELECT ASIN(0.2); -> 0.201358 mysql> SELECT ASIN("foo"); -> 0.000000ATAN(X)
返回X
的反正切,更确切地说,返回正切值为X
的值: mysql> SELECT ATAN(2); -> 1.107149 mysql> SELECT ATAN(-2); -> -1.107149ATAN(Y,X)
ATAN2(Y,X)
返回两个变量X
和Y
的反正切。它类似于计算Y / X
的反正切,除了两个参数的符号用于决定结果的象限: mysql> SELECT ATAN(-2,2); -> -0.785398 mysql> SELECT ATAN2(PI(),0); -> 1.570796COT(X)
返回X
的余切: mysql> SELECT COT(12); -> -1.57267341 mysql> SELECT COT(0); -> NULLRAND()
RAND(N)
返回一个范围在0
到1.0
之间的随机浮点值。如果一个整数参数N
被指定,它被当做种子值使用(用于产生一个可重复的数值): mysql> SELECT RAND(); -> 0.9233482386203 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(); -> 0.63553050033332 mysql> SELECT RAND(); -> 0.70100469486881在一个ORDER BY
子句中,不可以使用RAND()
值使用一个列,因为ORDER BY
将多次重复计算列。从 MySQL 3.23 开始,你可以使用:SELECT * FROM table_name ORDER BY RAND()
,这有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000
的集合中的随机样本。 注意,在一个WHERE
子句中的RAND()
将在每次WHERE
执行时被重新计算。RAND()
并不是预期完美的随机数发生器,但是可以代替做为产生特别的随机数一个快速的方法,这样便于在两个不同平台下的同一 MySQL 版本间移动。LEAST(X,Y,...)
- 有两个或更多个参数,返回最小(最小值)的参数。参数使用下列规则进行比较:
- 如果返回值用于一个
INTEGER
语境,或所有的参数是整数值,它们作为整数比较。- 如果返回值用于一个
REAL
语境,或所有的参数均是实数值,它们作为实数被比较。- 如果任何一个参数是字母大小写敏感的,参数作为大小写敏感的字符串进行比较。
- 在其它情况下,参数做为忽略大小写的字符中进行比较:
mysql> SELECT LEAST(2,0); -> 0 mysql> SELECT LEAST(34.0,3.0,5.0,767.0); -> 3.0 mysql> SELECT LEAST("B","A","C"); -> "A"在早于 MySQL 3.22.5 的版本中,你可以使用MIN()
代替LEAST
。GREATEST(X,Y,...)
返回最大(最大值)参数。参数使用与LEAST
一致的规则进行比较: mysql> SELECT GREATEST(2,0); -> 2 mysql> SELECT GREATEST(34.0,3.0,5.0,767.0); -> 767.0 mysql> SELECT GREATEST("B","A","C"); -> "C"在早于 MySQL 3.22.5 的版本中,可以使用MAX()
代替GREATEST
。DEGREES(X)
将参数X
从弧度转换为角度,然后返回: mysql> SELECT DEGREES(PI()); -> 180.000000RADIANS(X)
将参数X
从角度转换为弧度,然后返回: mysql> SELECT RADIANS(90); -> 1.570796TRUNCATE(X,D)
将数值X
截到D
个小数,然后返回。如果D
为0
,结果将不包含小数点和小数部分: mysql> SELECT TRUNCATE(1.223,1); -> 1.2 mysql> SELECT TRUNCATE(1.999,1); -> 1.9 mysql> SELECT TRUNCATE(1.999,0); -> 1 mysql> SELECT TRUNCATE(-1.999,1); -> -1.9从 MySQL 3.23.51 开始,所有数字被四舍五入到零。 如果D
是负数,那么数字的整个部分被对准零位输出:mysql> SELECT TRUNCATE(122,-2); -> 100注意,十进值小数在计算机中通常不以精确数字存储,而是双精度型的值,你可能会被下列结果所愚弄:mysql> SELECT TRUNCATE(10.28*100,0); -> 1027上面结果的发生是因为 10.28 实际上是以某些像 10.2799999999999999 的形式被存储的。
遇到锁表快速解决办法依次执行1-6步,运行第6步生成的语句即可。如果特别着急,运行 1 2 6 步 以及第6步生成的kill语句 即可。第...
如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。 如果仅仅使用CREATE TABLE ... SELECT 命令,是无法...
如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题。 本章节将为大家介绍如何防...
MySQL Date 函数定义和用法 CURTIME() 返回当前的时间。 语法CURTIME()实例 下面是 SELECT 语句:SELECT NOW(),CURDATE(),CURTIM...