數值函數: 用來處理很多數值方面的運算,使用數值函數,可以免去很多繁雜的判斷求值的過程,能夠大大提高用戶的工作效率。 1、ABS(x):返回 x 的絕對值 2、CEIL(x):返回不小於 x 的最小整數,也就是說得大於或等於x的最小整數 同義詞:ceiling(x) 3、FLOOR(x):返回不大於 ...
數值函數:
用來處理很多數值方面的運算,使用數值函數,可以免去很多繁雜的判斷求值的過程,能夠大大提高用戶的工作效率。
1、ABS(x):返回 x 的絕對值
mysql> select abs(-0.8),abs(0.8); +-----------+----------+ | abs(-0.8) | abs(0.8) | +-----------+----------+ | 0.8 | 0.8 | +-----------+----------+
2、CEIL(x):返回不小於 x 的最小整數,也就是說得大於或等於x的最小整數
同義詞:ceiling(x)
mysql> select ceil(1); +---------+ | ceil(1) | +---------+ | 1 | +---------+ mysql> select ceil(1.23),ceiling(-1.23); +------------+----------------+ | ceil(1.23) | ceiling(-1.23) | +------------+----------------+ | 2 | -1 | +------------+----------------+
3、FLOOR(x):返回不大於 x 的最大整數(與CEIL的用法剛好相反)
mysql> select floor(1.23),floor(-1.23); +-------------+--------------+ | floor(1.23) | floor(-1.23) | +-------------+--------------+ | 1 | -2 | +-------------+--------------+
4、MOD(x,y):返回數字x除以y後的餘數:x mod y
和 x%y 的結果相同;
模數和被模數任何一個為NULL(無效數)結果都為 NULL
mysql> select mod(123,10),234%7,3 mod 2; +-------------+-------+---------+ | mod(123,10) | 234%7 | 3 mod 2 | +-------------+-------+---------+ | 3 | 3 | 1 | +-------------+-------+---------+
註意:餘數可以有小數;除數為0不拋出異常
mysql> select mod(3.14,3),mod(3,0); +-------------+----------+ | mod(3.14,3) | mod(3,0) | +-------------+----------+ | 0.14 | NULL | +-------------+----------+
5、ROUND(X[,D]):將數字X四捨五入到指定的小數位數D
①如果不指定D,則預設為0
②如果D是負數,表示從小數點的左邊進行四捨五入
mysql> select round(1.58),round(1.298,1); +-------------+----------------+ | round(1.58) | round(1.298,1) | +-------------+----------------+ | 2 | 1.3 | +-------------+----------------+ mysql> select round(1.58,0),round(1.298,-1); +---------------+-----------------+ | round(1.58,0) | round(1.298,-1) | +---------------+-----------------+ | 2 | 0 | +---------------+-----------------+
6、TRUNCATE(X,D):將數字X截斷到指定的小數位數D(不四捨五入)
①如果D為0,表示不要小數
②如果D是負數,表示從小數點的左邊進行截斷
mysql> select truncate(1.999,1),truncate(1.999,0); +-------------------+-------------------+ | truncate(1.999,1) | truncate(1.999,0) | +-------------------+-------------------+ | 1.9 | 1 | +-------------------+-------------------+ mysql> select truncate(-1.999,1),truncate(123,-2); +--------------------+------------------+ | truncate(-1.999,1) | truncate(123,-2) | +--------------------+------------------+ | -1.9 | 100 | +--------------------+------------------+
註意:TRUNCATE 和 ROUND 的區別在於 TRUNCATE 僅僅是截斷,而不進行四捨五入
mysql> select round(1.235,2),truncate(1.235,2); +----------------+-------------------+ | round(1.235,2) | truncate(1.235,2) | +----------------+-------------------+ | 1.24 | 1.23 | +----------------+-------------------+
7、RAND():返回一個隨機浮點數v(0<=v<1.0)
mysql> select rand(),rand(); +--------------------+---------------------+ | rand() | rand() | +--------------------+---------------------+ | 0.7085628693071779 | 0.19879874978102627 | +--------------------+---------------------+
RAND(x):指定整數x,則用作種子值,產生一個可重覆的數字序列
mysql> select rand(1),rand(2),rand(1); +---------------------+--------------------+---------------------+ | rand(1) | rand(2) | rand(1) | +---------------------+--------------------+---------------------+ | 0.40540353712197724 | 0.6555866465490187 | 0.40540353712197724 | +---------------------+--------------------+---------------------+
利用RAND()函數可以取任意指定範圍內的隨機數
類似於shell> $((RANDOM % 100))得到隨機值
比如:產生 0~100 內的任意隨機整數
mysql> select ceil(100*rand()),ceil(100*rand()); +------------------+------------------+ | ceil(100*rand()) | ceil(100*rand()) | +------------------+------------------+ | 87 | 75 | +------------------+------------------+
若要得到一個隨機整數R,i <= R < j
expr:FLOOR(i + RAND() * (j - i))
Q:取隨機整數R,7<=R<12
A:mysql> select floor(7+(rand()*5));
註意:
①當在 WHERE 子句中使用RAND()時,每次當WHERE執行時都要重新計算 RAND()
②不能在ORDER BY子句中使用帶有隨機值的列
但是,可以以隨機的順序從表中檢索行
例如:mysql> SELECT * FROM players ORDER BY RAND();
③ORDER BY RAND()常和LIMIT子句一起使用:
例如:mysql> SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000;