登录 |  注册
首页 >  数据库 >  MySql基础知识 >  MySQL数学函数

MySQL数学函数

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); -> 1
MOD(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 -> 2
DIV 在 MySQL 4.1.0 中新加入。
EXP(X) 返回值  e  (自然对数的底) 的  X  次方:
mysql> SELECT EXP(2); -> 7.389056 mysql> SELECT EXP(-2); -> 0.135335
LN(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); -> NULL
LOG2() 一般可以用于计数出一个数字需要多少个比特位用于存储它。这个函数在 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); -> NULL
POW(X,Y)
POWER(X,Y) 返回  X  的  Y  幂:
mysql> SELECT POW(2,2); -> 4.000000 mysql> SELECT POW(2,-2); -> 0.250000
SQRT(X) 返回  X  的非否平方根:
mysql> SELECT SQRT(4); -> 2.000000 mysql> SELECT SQRT(20); -> 4.472136
PI() 返回 PI 值(圆周率)。缺少显示 5 位小数,但是在 MySQL 内部,为 PI 使用全部的双精度。
mysql> SELECT PI(); -> 3.141593 mysql> SELECT PI()+0.000000000000000000; -> 3.141592653589793116
COS(X) 返回  X  的余弦,在这里, X  以弧度给出:
mysql> SELECT COS(PI()); -> -1.000000
SIN(X) 返回  X  的正弦,在这里, X  以弧度给出:
mysql> SELECT SIN(PI()); -> 0.000000
TAN(X) 返回  X  的正切,在这里, X  以弧度给出:
mysql> SELECT TAN(PI()+1); -> 1.557408
ACOS(X) 返回  X  的反余弦,更确切地说,返回余弦值为  X  的值。如果  X  不在  -1  到  1  之间的范围内,返回  NULL
mysql> SELECT ACOS(1); -> 0.000000 mysql> SELECT ACOS(1.0001); -> NULL mysql> SELECT ACOS(0); -> 1.570796
ASIN(X) 返回  X  的反正弦,更确切地说,返回正弦值为  X  的值。如果  X  不在  -1  到  1  之间的范围内,返回  NULL
mysql> SELECT ASIN(0.2); -> 0.201358 mysql> SELECT ASIN('foo'); -> 0.000000
ATAN(X) 返回  X  的反正切,更确切地说,返回正切值为  X  的值:
mysql> SELECT ATAN(2); -> 1.107149 mysql> SELECT ATAN(-2); -> -1.107149
ATAN(Y,X)
ATAN2(Y,X) 返回两个变量  X  和  Y  的反正切。它相似于计算  Y / X  的反正切,除了两个参数的符号用于决定结果的象限:
mysql> SELECT ATAN(-2,2); -> -0.785398 mysql> SELECT ATAN2(PI(),0); -> 1.570796
COT(X) 返回  X  的余切:
mysql> SELECT COT(12); -> -1.57267341 mysql> SELECT COT(0); -> NULL
RAND()
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.000000
RADIANS(X) 将参数  X  从角度转换为弧度,然后返回:
mysql> SELECT RADIANS(90); -> 1.570796
TRUNCATE(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 的形式被存储的。
上一篇: MySQL字符串截取SUBSTRING()函数
下一篇: mysqlsubstr()函数
推荐文章
  • mysql只支持一种join算法:Nested-LoopJoin(嵌套循环连接),但Nested-LoopJoin有三种变种:SimpleNested-LoopJoin,IndexNested-LoopJoin,BlockNested-LoopJoin(简单-索引-缓冲区)原理:1.SimpleNe
  • redis是一个内存数据库,一旦断电或服务器进程退出,内存数据库中的数据将全部丢失,所以需要redis持久化 redis持久化就是把数据保存在磁盘上,利用永久性存储介质将数据保存,在特定的时间将保存的数据进行恢复的工作机制redis提供两种持久化机制RDB:存储数据结果,关注点在数据AOF:存储操作
  • 通过SQL的执行过程来介绍MySQL的基础结构.     首先有一个user_info表,表里有一个id字段,执行下面这条查询语句:Select * form user_info where i
  • 索引(Index)是帮助MySQL高效获取数据的数据结构,索引的目的在于提高查询效率,就像字典和书籍的目录一样,有了目录,可以帮助你快速查找你需要的内容。可以理解为一个排好序的快速查找数据结构。也就是
  • 说到数据库事务,大家脑子里一定很容易蹦出一堆事务的相关知识,如事务的ACID特性,隔离级别,解决的问题(脏读,不可重复读,幻读)等等,但是可能很少有人真正的清楚事务的这些特性又是怎么实现的,为什么要有四个隔离级别。今天我们就先来聊聊MySQL中事务的隔离性的实现原理,后续还会继续出文章分析其他特性的
  • 前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。那么,一条更新语句
学习大纲