数值函数:
用来处理很多数值方面的运算,使用数值函数,可以免去很多繁杂的判断求值的过程,能够大大提高用户的工作效率。
1、ABS(x):返回 x 的绝对值
1 2 3 4 5 6 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> abs(-<span style="color: rgba(128, 0, 128, 1);">0.8</span>),abs(<span style="color: rgba(128, 0, 128, 1);">0.8</span><span style="color: rgba(0, 0, 0, 1);">); </span>+-----------+----------+ | abs(-<span style="color: rgba(128, 0, 128, 1);">0.8</span>) | abs(<span style="color: rgba(128, 0, 128, 1);">0.8</span>) | +-----------+----------+ | <span style="color: rgba(128, 0, 128, 1);">0.8</span> | <span style="color: rgba(128, 0, 128, 1);">0.8</span> | +-----------+----------+</span> |
2、CEIL(x):返回不小于 x 的最小整数,也就是说得大于或等于x的最小整数
同义词:ceiling(x)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> ceil(<span style="color: rgba(128, 0, 128, 1);">1</span><span style="color: rgba(0, 0, 0, 1);">); </span>+---------+ | ceil(<span style="color: rgba(128, 0, 128, 1);">1</span>) | +---------+ | <span style="color: rgba(128, 0, 128, 1);">1</span> | +---------+<span style="color: rgba(0, 0, 0, 1);"> mysql</span>> <span style="color: rgba(0, 0, 255, 1);">select</span> ceil(<span style="color: rgba(128, 0, 128, 1);">1.23</span>),ceiling(-<span style="color: rgba(128, 0, 128, 1);">1.23</span><span style="color: rgba(0, 0, 0, 1);">); </span>+------------+----------------+ | ceil(<span style="color: rgba(128, 0, 128, 1);">1.23</span>) | ceiling(-<span style="color: rgba(128, 0, 128, 1);">1.23</span>) | +------------+----------------+ | <span style="color: rgba(128, 0, 128, 1);">2</span> | -<span style="color: rgba(128, 0, 128, 1);">1</span> | +------------+----------------+</span> |
3、FLOOR(x):返回不大于 x 的最大整数(与CEIL的用法刚好相反)
1 2 3 4 5 6 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> floor(<span style="color: rgba(128, 0, 128, 1);">1.23</span>),floor(-<span style="color: rgba(128, 0, 128, 1);">1.23</span><span style="color: rgba(0, 0, 0, 1);">); </span>+-------------+--------------+ | floor(<span style="color: rgba(128, 0, 128, 1);">1.23</span>) | floor(-<span style="color: rgba(128, 0, 128, 1);">1.23</span>) | +-------------+--------------+ | <span style="color: rgba(128, 0, 128, 1);">1</span> | -<span style="color: rgba(128, 0, 128, 1);">2</span> | +-------------+--------------+</span> |
4、MOD(x,y):返回数字x除以y后的余数:x mod y
和 x%y 的结果相同;
模数和被模数任何一个为NULL(无效数)结果都为 NULL
1 2 3 4 5 6 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> mod(<span style="color: rgba(128, 0, 128, 1);">123</span>,<span style="color: rgba(128, 0, 128, 1);">10</span>),<span style="color: rgba(128, 0, 128, 1);">234</span>%<span style="color: rgba(128, 0, 128, 1);">7</span>,<span style="color: rgba(128, 0, 128, 1);">3</span> mod <span style="color: rgba(128, 0, 128, 1);">2</span><span style="color: rgba(0, 0, 0, 1);">; </span>+-------------+-------+---------+ | mod(<span style="color: rgba(128, 0, 128, 1);">123</span>,<span style="color: rgba(128, 0, 128, 1);">10</span>) | <span style="color: rgba(128, 0, 128, 1);">234</span>%<span style="color: rgba(128, 0, 128, 1);">7</span> | <span style="color: rgba(128, 0, 128, 1);">3</span> mod <span style="color: rgba(128, 0, 128, 1);">2</span> | +-------------+-------+---------+ | <span style="color: rgba(128, 0, 128, 1);">3</span> | <span style="color: rgba(128, 0, 128, 1);">3</span> | <span style="color: rgba(128, 0, 128, 1);">1</span> | +-------------+-------+---------+</span> |
注意:余数可以有小数;除数为0不抛出异常
1 2 3 4 5 6 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> mod(<span style="color: rgba(128, 0, 128, 1);">3.14</span>,<span style="color: rgba(128, 0, 128, 1);">3</span>),mod(<span style="color: rgba(128, 0, 128, 1);">3</span>,<span style="color: rgba(128, 0, 128, 1);">0</span><span style="color: rgba(0, 0, 0, 1);">); </span>+-------------+----------+ | mod(<span style="color: rgba(128, 0, 128, 1);">3.14</span>,<span style="color: rgba(128, 0, 128, 1);">3</span>) | mod(<span style="color: rgba(128, 0, 128, 1);">3</span>,<span style="color: rgba(128, 0, 128, 1);">0</span>) | +-------------+----------+ | <span style="color: rgba(128, 0, 128, 1);">0.14</span> | NULL | +-------------+----------+</span> |
5、ROUND(X[,D]):将数字X四舍五入到指定的小数位数D
①如果不指定D,则默认为0
②如果D是负数,表示从小数点的左边进行四舍五入
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> round(<span style="color: rgba(128, 0, 128, 1);">1.58</span>),round(<span style="color: rgba(128, 0, 128, 1);">1.298</span>,<span style="color: rgba(128, 0, 128, 1);">1</span><span style="color: rgba(0, 0, 0, 1);">); </span>+-------------+----------------+ | round(<span style="color: rgba(128, 0, 128, 1);">1.58</span>) | round(<span style="color: rgba(128, 0, 128, 1);">1.298</span>,<span style="color: rgba(128, 0, 128, 1);">1</span>) | +-------------+----------------+ | <span style="color: rgba(128, 0, 128, 1);">2</span> | <span style="color: rgba(128, 0, 128, 1);">1.3</span> | +-------------+----------------+<span style="color: rgba(0, 0, 0, 1);"> mysql</span>> <span style="color: rgba(0, 0, 255, 1);">select</span> round(<span style="color: rgba(128, 0, 128, 1);">1.58</span>,<span style="color: rgba(128, 0, 128, 1);">0</span>),round(<span style="color: rgba(128, 0, 128, 1);">1.298</span>,-<span style="color: rgba(128, 0, 128, 1);">1</span><span style="color: rgba(0, 0, 0, 1);">); </span>+---------------+-----------------+ | round(<span style="color: rgba(128, 0, 128, 1);">1.58</span>,<span style="color: rgba(128, 0, 128, 1);">0</span>) | round(<span style="color: rgba(128, 0, 128, 1);">1.298</span>,-<span style="color: rgba(128, 0, 128, 1);">1</span>) | +---------------+-----------------+ | <span style="color: rgba(128, 0, 128, 1);">2</span> | <span style="color: rgba(128, 0, 128, 1);">0</span> | +---------------+-----------------+</span> |
6、TRUNCATE(X,D):将数字X截断到指定的小数位数D(不四舍五入)
①如果D为0,表示不要小数
②如果D是负数,表示从小数点的左边进行截断
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> truncate(<span style="color: rgba(128, 0, 128, 1);">1.999</span>,<span style="color: rgba(128, 0, 128, 1);">1</span>),truncate(<span style="color: rgba(128, 0, 128, 1);">1.999</span>,<span style="color: rgba(128, 0, 128, 1);">0</span><span style="color: rgba(0, 0, 0, 1);">); </span>+-------------------+-------------------+ | truncate(<span style="color: rgba(128, 0, 128, 1);">1.999</span>,<span style="color: rgba(128, 0, 128, 1);">1</span>) | truncate(<span style="color: rgba(128, 0, 128, 1);">1.999</span>,<span style="color: rgba(128, 0, 128, 1);">0</span>) | +-------------------+-------------------+ | <span style="color: rgba(128, 0, 128, 1);">1.9</span> | <span style="color: rgba(128, 0, 128, 1);">1</span> | +-------------------+-------------------+<span style="color: rgba(0, 0, 0, 1);"> mysql</span>> <span style="color: rgba(0, 0, 255, 1);">select</span> truncate(-<span style="color: rgba(128, 0, 128, 1);">1.999</span>,<span style="color: rgba(128, 0, 128, 1);">1</span>),truncate(<span style="color: rgba(128, 0, 128, 1);">123</span>,-<span style="color: rgba(128, 0, 128, 1);">2</span><span style="color: rgba(0, 0, 0, 1);">); </span>+--------------------+------------------+ | truncate(-<span style="color: rgba(128, 0, 128, 1);">1.999</span>,<span style="color: rgba(128, 0, 128, 1);">1</span>) | truncate(<span style="color: rgba(128, 0, 128, 1);">123</span>,-<span style="color: rgba(128, 0, 128, 1);">2</span>) | +--------------------+------------------+ | -<span style="color: rgba(128, 0, 128, 1);">1.9</span> | <span style="color: rgba(128, 0, 128, 1);">100</span> | +--------------------+------------------+</span> |
注意:TRUNCATE 和 ROUND 的区别在于 TRUNCATE 仅仅是截断,而不进行四舍五入
1 2 3 4 5 6 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> round(<span style="color: rgba(128, 0, 128, 1);">1.235</span>,<span style="color: rgba(128, 0, 128, 1);">2</span>),truncate(<span style="color: rgba(128, 0, 128, 1);">1.235</span>,<span style="color: rgba(128, 0, 128, 1);">2</span><span style="color: rgba(0, 0, 0, 1);">); </span>+----------------+-------------------+ | round(<span style="color: rgba(128, 0, 128, 1);">1.235</span>,<span style="color: rgba(128, 0, 128, 1);">2</span>) | truncate(<span style="color: rgba(128, 0, 128, 1);">1.235</span>,<span style="color: rgba(128, 0, 128, 1);">2</span>) | +----------------+-------------------+ | <span style="color: rgba(128, 0, 128, 1);">1.24</span> | <span style="color: rgba(128, 0, 128, 1);">1.23</span> | +----------------+-------------------+</span> |
7、RAND():返回一个随机浮点数v(0<=v<1.0)
1 2 3 4 5 6 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span><span style="color: rgba(0, 0, 0, 1);"> rand(),rand(); </span>+--------------------+---------------------+ | rand() | rand() | +--------------------+---------------------+ | <span style="color: rgba(128, 0, 128, 1);">0.7085628693071779</span> | <span style="color: rgba(128, 0, 128, 1);">0.19879874978102627</span> | +--------------------+---------------------+</span> |
RAND(x):指定整数x,则用作种子值,产生一个可重复的数字序列
1 2 3 4 5 6 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> rand(<span style="color: rgba(128, 0, 128, 1);">1</span>),rand(<span style="color: rgba(128, 0, 128, 1);">2</span>),rand(<span style="color: rgba(128, 0, 128, 1);">1</span><span style="color: rgba(0, 0, 0, 1);">); </span>+---------------------+--------------------+---------------------+ | rand(<span style="color: rgba(128, 0, 128, 1);">1</span>) | rand(<span style="color: rgba(128, 0, 128, 1);">2</span>) | rand(<span style="color: rgba(128, 0, 128, 1);">1</span>) | +---------------------+--------------------+---------------------+ | <span style="color: rgba(255, 102, 0, 1);">0.40540353712197724</span> | <span style="color: rgba(128, 0, 128, 1);">0.6555866465490187</span> | <span style="color: rgba(255, 102, 0, 1);">0.40540353712197724</span> | +---------------------+--------------------+---------------------+</span> |
利用RAND()函数可以取任意指定范围内的随机数
类似于shell> $((RANDOM % 100))得到随机值
比如:产生 0~100 内的任意随机整数
1 2 3 4 5 6 |
<span style="font-size: 16px;">mysql> <span style="color: rgba(0, 0, 255, 1);">select</span> ceil(<span style="color: rgba(128, 0, 128, 1);">100</span>*rand()),ceil(<span style="color: rgba(128, 0, 128, 1);">100</span>*<span style="color: rgba(0, 0, 0, 1);">rand()); </span>+------------------+------------------+ | ceil(<span style="color: rgba(128, 0, 128, 1);">100</span>*rand()) | ceil(<span style="color: rgba(128, 0, 128, 1);">100</span>*rand()) | +------------------+------------------+ | <span style="color: rgba(128, 0, 128, 1);">87</span> | <span style="color: rgba(128, 0, 128, 1);">75</span> | +------------------+------------------+</span> |
若要得到一个随机整数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;