设为首页 收藏本站
查看: 1101|回复: 0

[经验分享] MySQL常用数值函数

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-12-12 16:32:49 | 显示全部楼层 |阅读模式
数值函数:

  用来处理很多数值方面的运算,使用数值函数,可以免去很多繁杂的判断求值的过程,能够大大提高用户的工作效率。

DSC0000.png

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;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-423394-1-1.html 上篇帖子: 你的MySQL服务器开启SSL了吗? 下篇帖子: MySQL 逻辑运算符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表