MySQL常用數值函數


數值函數:

  用來處理很多數值方面的運算,使用數值函數,可以免去很多繁雜的判斷求值的過程,能夠大大提高用戶的工作效率。

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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM