MySQL基礎(chǔ)教程8 —— 函數(shù)之?dāng)?shù)值函數(shù)
可使用常見的算術(shù)操作符。注意就-、+和*而言,若兩個(gè)參數(shù)均為正數(shù),則其計(jì)算結(jié)果的精確度為BIGINT (64比特),若其中一個(gè)參數(shù)為無符號(hào)整數(shù), 而其它參數(shù)也是整數(shù),則結(jié)果為無符號(hào)整數(shù)。
+加號(hào):
mysql>SELECT 3+5;
-> 8
-減號(hào):
mysql>SELECT 3-5;
-> -2
-一元減號(hào)。更換參數(shù)符號(hào)。
mysql>SELECT - 2;
-> -2
注意:若該 操作符同一個(gè)BIGINT同時(shí)使用,則返回值也是一個(gè)BIGINT。這意味著你應(yīng)當(dāng)盡量避免對(duì)可能產(chǎn)生–263的整數(shù)使用 –。
*乘號(hào):
mysql>SELECT 3*5;
-> 15
mysql>SELECT 18014398509481984*18014398509481984.0;
-> 324518553658426726783156020576256.0
mysql>SELECT 18014398509481984*18014398509481984;
-> 0
最后一個(gè)表達(dá)式的結(jié)果是不正確的。原因是整數(shù)相乘的結(jié)果超過了BIGINT計(jì)算的64比特范圍。
/除號(hào):
mysql>SELECT 3/5;
-> 0.60
被零除的結(jié)果為NULL:
mysql>SELECT 102/(1-1);
-> NULL
只有當(dāng)執(zhí)行的語境中,其結(jié)果要被轉(zhuǎn)化為一個(gè)整數(shù)時(shí) ,除法才會(huì)和BIGINT算法一起使用。
DIV整數(shù)除法。 類似于FLOOR(),然而使用BIGINT算法也是可靠的。
mysql>SELECT 5 DIV 2;
-> 2
2.數(shù)學(xué)函數(shù)若發(fā)生錯(cuò)誤,所有數(shù)學(xué)函數(shù)會(huì)返回NULL。
ABS(X)返回X的絕對(duì)值。
mysql>SELECT ABS(2);
-> 2
mysql>SELECT ABS(-32);
-> 32
該函數(shù)支持使用BIGINT值。
ACOS(X)返回X反余弦,即,余弦是X的值。若X不在-1到1的范圍之內(nèi),則返回NULL。
mysql>SELECT ACOS(1);
-> 0
mysql>SELECT ACOS(1.0001);
-> NULL
mysql>SELECT ACOS(0);
-> 1.5707963267949
ASIN(X)返回X的反正弦,即,正弦為X的值。若X若X不在-1到1的范圍之內(nèi),則返回NULL。
mysql> SELECT ASIN(0.2); -> 0.20135792079033mysql> SELECT ASIN(’foo’);+-------------+| ASIN(’foo’) |+-------------+| 0 |+-------------+1 row in set, 1 warning (0.00 sec)mysql> SHOW WARNINGS;+---------+------+-----------------------------------------+| Level | Code | Message |+---------+------+-----------------------------------------+| Warning | 1292 | Truncated incorrect DOUBLE value: ’foo’ |+---------+------+-----------------------------------------+ATAN(X)
返回X的反正切,即,正切為X的值。
mysql>SELECT ATAN(2);
-> 1.1071487177941
mysql>SELECT ATAN(-2);
-> -1.1071487177941
ATAN(Y,X) , ATAN2(Y,X)返回兩個(gè)變量X及Y的反正切。 它類似于Y或X的反正切計(jì)算,除非兩個(gè)參數(shù)的符號(hào)均用于確定結(jié)果所在象限。
mysql>SELECT ATAN(-2,2);
-> -0.78539816339745
mysql>SELECT ATAN2(PI(),0);
-> 1.5707963267949
CEILING(X) CEIL(X)返回不小于X的最小整數(shù)值。
mysql>SELECT CEILING(1.23);
-> 2
mysql>SELECT CEIL(-1.23);
-> -1
這兩個(gè)函數(shù)的意義相同。注意返回值會(huì)被轉(zhuǎn)化為一個(gè)BIGINT。
COS(X)返回X的余弦,其中X在弧度上已知。
mysql>SELECT COS(PI());
-> -1
COT(X)返回X的余切。
mysql>SELECT COT(12);
-> -1.5726734063977
mysql>SELECT COT(0);
-> NULL
CRC32(expr)計(jì)算循環(huán)冗余碼校驗(yàn)值并返回一個(gè)32比特?zé)o符號(hào)值。若參數(shù)為NULL,則結(jié)果為NULL。該參數(shù)應(yīng)為一個(gè)字符串,而且在不是字符串的情況下會(huì)被作為字符串處理(若有可能)。
mysql>SELECT CRC32(’MySQL’);
-> 3259397556
mysql>SELECT CRC32(’mysql’);
-> 2501908538
DEGREES(X)返回參數(shù)X,該參數(shù)由弧度被轉(zhuǎn)化為度。
mysql>SELECT DEGREES(PI());
-> 180
mysql>SELECT DEGREES(PI() / 2);
-> 90
EXP(X)返回e的X乘方后的值(自然對(duì)數(shù)的底)。
mysql>SELECT EXP(2);
-> 7.3890560989307
mysql>SELECT EXP(-2);
-> 0.13533528323661
mysql>SELECT EXP(0);
-> 1
FLOOR(X)返回不大于X的最大整數(shù)值 。
mysql>SELECT FLOOR(1.23);
-> 1
mysql>SELECT FLOOR(-1.23);
-> -2
注意,返回值會(huì)被轉(zhuǎn)化為一個(gè)BIGINT。
FORMAT(X,D)將數(shù)字X的格式寫成’#,###,###.##’格式,即保留小數(shù)點(diǎn)后D位,而第D位的保留方式為四舍五入,然后將結(jié)果以字符串的形式返回。
LN(X)返回X的自然對(duì)數(shù),即,X相對(duì)于基數(shù)e的對(duì)數(shù)。
mysql>SELECT LN(2);
-> 0.69314718055995
mysql>SELECT LN(-2);
-> NULL
這個(gè)函數(shù)同LOG(X)具有相同意義。
LOG(X) LOG(B,X)若用一個(gè)參數(shù)調(diào)用,這個(gè)函數(shù)就會(huì)返回X的自然對(duì)數(shù)。
mysql>SELECT LOG(2);
-> 0.69314718055995
mysql>SELECT LOG(-2);
-> NULL
若用兩個(gè)參數(shù)進(jìn)行調(diào)用,這個(gè)函數(shù)會(huì)返回X對(duì)于任意基數(shù)B的對(duì)數(shù)。
mysql>SELECT LOG(2,65536);
-> 16
mysql>SELECT LOG(10,100);
-> 2
LOG(B,X)就相當(dāng)于LOG(X) / LOG(B)。
LOG2(X)返回X的基數(shù)為2的對(duì)數(shù)。
mysql>SELECT LOG2(65536);
-> 16
mysql>SELECT LOG2(-100);
-> NULL
對(duì)于查出存儲(chǔ)一個(gè)數(shù)字需要多少個(gè)比特,LOG2()非常有效。這個(gè)函數(shù)相當(dāng)于表達(dá)式LOG(X) / LOG(2)。
LOG10(X)返回X的基數(shù)為10的對(duì)數(shù)。
mysql>SELECT LOG10(2);
-> 0.30102999566398
mysql>SELECT LOG10(100);
-> 2
mysql>SELECT LOG10(-100);
-> NULL
LOG10(X)相當(dāng)于LOG(10,X)。
MOD(N,M) ,N%MNMODM模操作。返回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值。
MOD()對(duì)于帶有小數(shù)部分的數(shù)值也起作用, 它返回除法運(yùn)算后的精確余數(shù):
mysql>SELECT MOD(34.5,3);
-> 1.5
PI()返回?(pi)的值。默認(rèn)的顯示小數(shù)位數(shù)是7位,然而MySQL內(nèi)部會(huì)使用完全雙精度值。
mysql>SELECT PI();
-> 3.141593
mysql>SELECT PI()+0.000000000000000000;
-> 3.141592653589793116
POW(X,Y) , POWER(X,Y)返回X的Y乘方的結(jié)果值。
mysql>SELECT POW(2,2);
-> 4
mysql>SELECT POW(2,-2);
-> 0.25
RADIANS(X)返回由度轉(zhuǎn)化為弧度的參數(shù)X, (注意?弧度等于180度)。
mysql>SELECT RADIANS(90);
-> 1.5707963267949
RAND() RAND(N)返回一個(gè)隨機(jī)浮點(diǎn)值v,范圍在0到1之間(即,其范圍為0≤v≤1.0)。若已指定一個(gè)整數(shù)參數(shù)N,則它被用作種子值,用來產(chǎn)生重復(fù)序列。
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
mysql>SELECT RAND(20);
-> 0.15888261251047
若要在i≤R≤j這個(gè)范圍得到一個(gè)隨機(jī)整數(shù)R,需要用到表達(dá)式FLOOR(i+ RAND() * (j–i+ 1))。例如, 若要在7到12的范圍(包括7和12)內(nèi)得到一個(gè)隨機(jī)整數(shù),可使用以下語句:
SELECT FLOOR(7 + (RAND() * 6));
在ORDER BY語句中,不能使用一個(gè)帶有RAND()值的列,原因是ORDER BY會(huì)計(jì)算列的多重時(shí)間。然而,可按照如下的隨機(jī)順序檢索數(shù)據(jù)行:
mysql>SELECT * FROMtbl_nameORDER BY RAND();
ORDER BY RAND()同LIMIT的結(jié)合從一組列中選擇隨機(jī)樣本很有用:
mysql>SELECT * FROM table1, table2 WHERE a=b AND c<d
->ORDER BY RAND() LIMIT 1000;
注意,在WHERE語句中,WHERE每執(zhí)行一次,RAND()就會(huì)被再計(jì)算一次。
RAND()的作用不是作為一個(gè)精確的隨機(jī)發(fā)生器,而是一種用來發(fā)生在同樣的MySQL版本的平臺(tái)之間的可移動(dòng)ad hoc隨機(jī)數(shù)的快速方式。
ROUND(X) ROUND(X,D)返回參數(shù)X,其值接近于最近似的整數(shù)。在有兩個(gè)參數(shù)的情況下,返回X,其值保留到小數(shù)點(diǎn)后D位,而第D位的保留方式為四舍五入。若要接保留X值小數(shù)點(diǎn)左邊的D位,可將D設(shè)為負(fù)值。
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
mysql>SELECT ROUND(23.298, -1);
-> 20
返回值的類型同 第一個(gè)自變量相同(假設(shè)它是一個(gè)整數(shù)、雙精度數(shù)或小數(shù))。這意味著對(duì)于一個(gè)整數(shù)參數(shù),結(jié)果也是一個(gè)整數(shù)(無小數(shù)部分)。
當(dāng)?shù)谝粋€(gè)參數(shù)是十進(jìn)制常數(shù)時(shí),對(duì)于準(zhǔn)確值參數(shù),ROUND()使用精密數(shù)學(xué)題庫(kù):
對(duì)于準(zhǔn)確值數(shù)字, ROUND()使用“四舍五入” 或“舍入成最接近的數(shù)” 的規(guī)則:對(duì)于一個(gè)分?jǐn)?shù)部分為.5或大于.5的值,正數(shù)則上舍入到鄰近的整數(shù)值, 負(fù)數(shù)則下舍入臨近的整數(shù)值。(換言之,其舍入的方向是數(shù)軸上遠(yuǎn)離零的方向)。對(duì)于一個(gè)分?jǐn)?shù)部分小于.5的值,正數(shù)則下舍入下一個(gè)整數(shù)值,負(fù)數(shù)則下舍入鄰近的整數(shù)值,而正數(shù)則上舍入鄰近的整數(shù)值。對(duì)于近似值數(shù)字,其結(jié)果根據(jù)C庫(kù)而定。在很多系統(tǒng)中,這意味著ROUND()的使用遵循“舍入成最接近的偶數(shù)”的規(guī)則: 一個(gè)帶有任何小數(shù)部分的值會(huì)被舍入成最接近的偶數(shù)整數(shù)。以下舉例說明舍入法對(duì)于精確值和近似值的不同之處:
mysql>SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+| ROUND(2.5) | ROUND(25E-1) |+------------+--------------+| 3 | 2 |+------------+--------------+
SIGN(X)返回參數(shù)作為-1、0或1的符號(hào),該符號(hào)取決于X的值為負(fù)、零或正。
mysql>SELECT SIGN(-32);
-> -1
mysql>SELECT SIGN(0);
-> 0
mysql>SELECT SIGN(234);
-> 1
SIN(X)返回X正弦,其中X在弧度中被給定。
mysql>SELECT SIN(PI());
-> 1.2246063538224e-16
mysql>SELECT ROUND(SIN(PI()));
-> 0
SQRT(X)返回非負(fù)數(shù)X的二次方根。
mysql>SELECT SQRT(4);
-> 2
mysql>SELECT SQRT(20);
-> 4.4721359549996
mysql>SELECT SQRT(-16);
-> NULL
TAN(X)返回X的正切,其中X在弧度中被給定。
mysql>SELECT TAN(PI());
-> -1.2246063538224e-16
mysql>SELECT TAN(PI()+1);
-> 1.5574077246549
TRUNCATE(X,D)返回被舍去至小數(shù)點(diǎn)后D位的數(shù)字X。若D的值為0,則結(jié)果不帶有小數(shù)點(diǎn)或不帶有小數(shù)部分??梢詫設(shè)為負(fù)數(shù),若要截去(歸零) X小數(shù)點(diǎn)左起第D位開始后面所有低位的值.
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>SELECT TRUNCATE(122,-2);
-> 100
mysql>SELECT TRUNCATE(10.28*100,0);
-> 1028
所有數(shù)字的舍入方向都接近于零。
相關(guān)文章:
1. sql語句LEFT JOIN拼接表詳解2. 目前學(xué)習(xí)到的常用命令之Mariadb3. SQLite教程(四):內(nèi)置函數(shù)4. DB2 自動(dòng)遞增字段實(shí)現(xiàn)方法5. SQL Server數(shù)據(jù)庫(kù)的三種創(chuàng)建方法匯總6. 解決maven不能下載oracle jdbc驅(qū)動(dòng)的問題7. SQLite數(shù)據(jù)庫(kù)安裝及基本操作指南8. 國(guó)內(nèi)學(xué)院派專家對(duì)DB2 9新產(chǎn)品贊不絕口9. python之sqlalchemy創(chuàng)建表的實(shí)例詳解10. ubuntu下使用SQLite3的基本命令
