所有的數(shù)學(xué)函數(shù)在發(fā)生錯(cuò)誤的情況下,均返回 NULL
。
-
元減。改變參數(shù)的符號(hào)mysql> SELECT - 2; -> -2注意,如果這個(gè)操作符被用于一個(gè)
BIGINT
,返回值也是一個(gè) BIGINT
!這就意味著,應(yīng)該避免在一個(gè)可能有值-2^63
的整數(shù)上使用 -
操作符!ABS(X)
返回 X
的絕對(duì)值:mysql> SELECT ABS(2); -> 2 mysql> SELECT ABS(-32); -> 32這個(gè)函數(shù)可安全地使用于
BIGINT
值。SIGN(X)
以 -1
、0
或 1
方式返回參數(shù)的符號(hào),它取決于參數(shù) X
是負(fù)數(shù)、0 或正數(shù)。mysql> SELECT SIGN(-32); -> -1 mysql> SELECT SIGN(0); -> 0 mysql> SELECT SIGN(234); -> 1
MOD(N,M)
% 取模 (就如 C 中的 %
操作符)。返回 N
被 M
除后的余數(shù):mysql> SELECT MOD(234, 10); -> 4 mysql> SELECT 253 % 7; -> 1 mysql> SELECT MOD(29,9); -> 2 mysql> SELECT 29 MOD 9; -> 2這個(gè)函數(shù)可安全地使用于
BIGINT
值。最后一個(gè)示例可在 MySQL 4.1 中工作。FLOOR(X)
返回不大于 X
的最大整數(shù)值:mysql> SELECT FLOOR(1.23); -> 1 mysql> SELECT FLOOR(-1.23); -> -2注意,返回值被轉(zhuǎn)換為一個(gè)
BIGINT
!CEILING(X)
返回不小于 X
的最小整數(shù):mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEILING(-1.23); -> -1注意,返回值被轉(zhuǎn)換為一個(gè)
BIGINT
!
ROUND(X)
ROUND(X,D)
將參數(shù) X
四舍五入到最近的整數(shù),然后返回。兩個(gè)參數(shù)的形式是將一個(gè)數(shù)字四舍五入到 D
個(gè)小數(shù)后返回。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注意,當(dāng)參數(shù)在兩個(gè)整數(shù)之間時(shí),
ROUND()
的行為取決于
C 庫(kù)的實(shí)現(xiàn)。某些取整到最近的偶數(shù),總是向下取,總是向上取,也可能總是接近于零。如果你需要某種取整類型,應(yīng)該使用一個(gè)明確定義的函數(shù)比如 TRUNCATE()
或 FLOOR()
代替。DIV
整除。類似于 FLOOR()
,但是它可安全地用于 BIGINT
值。mysql> SELECT 5 DIV 2 -> 2
DIV
在 MySQL 4.1.0 中新加入。EXP(X)
返回值 e
(自然對(duì)數(shù)的底) 的 X
次方:mysql> SELECT EXP(2); -> 7.389056 mysql> SELECT EXP(-2); -> 0.135335
LN(X)
返回 X
的自然對(duì)數(shù):mysql> SELECT LN(2); -> 0.693147 mysql> SELECT LN(-2); -> NULL這個(gè)函數(shù)在 MySQL 4.0.3 被新加入。在 MySQL 中,它是
LOG(X)
的同義詞。LOG(X)
LOG(B,X)
如果以一個(gè)參數(shù)調(diào)用,它返回 X
的自然對(duì)數(shù):mysql> SELECT LOG(2); -> 0.693147 mysql> SELECT LOG(-2); -> NULL如果以兩個(gè)參數(shù)調(diào)用,這個(gè)函數(shù)返回
X
任意底 B
的對(duì)數(shù):mysql> SELECT LOG(2,65536); -> 16.000000 mysql> SELECT LOG(1,100); -> NULL任意底選項(xiàng)在 MySQL 4.0.3 中被加入。
LOG(B,X)
等價(jià)于 LOG(X)/LOG(B)
。LOG2(X)
返回 X
的以 2 為底的對(duì)數(shù):mysql> SELECT LOG2(65536); -> 16.000000 mysql> SELECT LOG2(-100); -> NULL
LOG2()
通常可以用于計(jì)數(shù)出一個(gè)數(shù)字需要多少個(gè)比特位用于存儲(chǔ)它。這個(gè)函數(shù)在 MySQL 4.0.3 中被添加。在更早的版本中,可以使用 LOG(X)/LOG(2)
來代替它。LOG10(X)
返回 X
以 10 為底的對(duì)數(shù):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 位小數(shù),但是在 MySQL 內(nèi)部,為 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
之間的范圍內(nèi),返回 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
之間的范圍內(nèi),返回 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)
返回兩個(gè)變量 X
和 Y
的反正切。它類似于計(jì)算 Y / X
的反正切,除了兩個(gè)參數(shù)的符號(hào)用于決定結(jié)果的象限: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)
返回一個(gè)范圍在 0
到 1.0
之間的隨機(jī)浮點(diǎn)值。如果一個(gè)整數(shù)參數(shù) N
被指定,它被當(dāng)做種子值使用(用于產(chǎn)生一個(gè)可重復(fù)的數(shù)值):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在一個(gè)
ORDER BY
子句中,不可以使用 RAND()
值使用一個(gè)列,因?yàn)?nbsp;ORDER BY
將多次重復(fù)計(jì)算列。從
MySQL 3.23 開始,你可以使用:SELECT * FROM table_name ORDER BY RAND()
,這有利于得到一個(gè)來自 SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000
的集合中的隨機(jī)樣本。 注意,在一個(gè) WHERE
子句中的 RAND()
將在每次 WHERE
執(zhí)行時(shí)被重新計(jì)算。 RAND()
并不是預(yù)期完美的隨機(jī)數(shù)發(fā)生器,但是可以代替做為產(chǎn)生特別的隨機(jī)數(shù)一個(gè)快速的方法,這樣便于在兩個(gè)不同平臺(tái)下的同一
MySQL 版本間移動(dòng)。LEAST(X,Y,...)
INTEGER
語(yǔ)境,或所有的參數(shù)是整數(shù)值,它們作為整數(shù)比較。REAL
語(yǔ)境,或所有的參數(shù)均是實(shí)數(shù)值,它們作為實(shí)數(shù)被比較。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,...)
返回最大(最大值)參數(shù)。參數(shù)使用與 LEAST
一致的規(guī)則進(jìn)行比較: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)
將參數(shù) X
從弧度轉(zhuǎn)換為角度,然后返回:mysql> SELECT DEGREES(PI()); -> 180.000000
RADIANS(X)
將參數(shù) X
從角度轉(zhuǎn)換為弧度,然后返回:mysql> SELECT RADIANS(90); -> 1.570796
TRUNCATE(X,D)
將數(shù)值 X
截到 D
個(gè)小數(shù),然后返回。如果 D
為 0
,結(jié)果將不包含小數(shù)點(diǎn)和小數(shù)部分: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 開始,所有數(shù)字被四舍五入到零。 如果
D
是負(fù)數(shù),那么數(shù)字的整個(gè)部分被對(duì)準(zhǔn)零位輸出:mysql> SELECT TRUNCATE(122,-2); -> 100注意,十進(jìn)值小數(shù)在計(jì)算機(jī)中通常不以精確數(shù)字存儲(chǔ),而是雙精度型的值,你可能會(huì)被下列結(jié)果所愚弄:
mysql> SELECT TRUNCATE(10.28*100,0); -> 1027上面結(jié)果的發(fā)生是因?yàn)? 10.28 實(shí)際上是以某些像 10.2799999999999999 的形式被存儲(chǔ)的。
更多建議: