算术运算符是SQL中最基本的运算符,MySQL自然不能缺少对其的支持。
![31706298772f3c6d0655732d3ef92312.png](https://i-blog.csdnimg.cn/blog_migrate/342cff2a5fa034c0226e45dbc74e10cd.jpeg)
既然其名称中有“算术”二字,给人的第一感觉当然是支持数字型的运算。所以我们先从数字着手了解它。
【1】建表
我的习惯一直是以案例作为学习的切入点。建一个数据表是第一步:
CREATE TABLE `num_oper01` ( a` int(11) DEFAULT NULL, `b` float DEFAULT NULL, `c` decimal(18,2) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8
![7fe74530b0c351d2fb98e4c64646a7f2.png](https://i-blog.csdnimg.cn/blog_migrate/9c30c2b405de4928878551d7ed8052c1.jpeg)
【2】数据准备
insert into num_oper01 values(3,3,3);insert into num_oper01 values(3,3.45,3.4);
![442b17c11b95320757f6dd52e4c6127f.png](https://i-blog.csdnimg.cn/blog_migrate/80a98289fe4f768de4323031bc653dca.jpeg)
结论:从select的结果可以看到,int永远是以不带小数位的整数存在,float则根据实际情况调整,而decimal则永远按定义的小数位形式显示。
【3】数字的加减乘除
select a,b,c,a+1.2,b+1.2,c+1.2 from num_oper01;select a,b,c,a-1.2,b-1.2,c-1.2 from num_oper01;select a,b,c,a*1.2,b*1.2,c*1.2 from num_oper01;select a,b,c,a/1.2,b/1.2,c/1.2 from num_oper01;
![01b6d4c76b85143ef5c5ce92fa664a2b.png](https://i-blog.csdnimg.cn/blog_migrate/fd6341f253f1c7b4f17393fda4ec6518.jpeg)
结论:
- MySQL会自动进行数据类型切换;
- 切换的顺序是:INT --> FLOAT --> DECIMAL
- MySQL会根据计算结果自动增加小数位数。
再来单独看看取余的计算效果:
![91effcd84bb55b357c9247422b3f8587.png](https://i-blog.csdnimg.cn/blog_migrate/545599ac6d99cb352dd7773190f29c91.jpeg)
从执行效果可以看出:
- INT与DECIMAL的取余还是INT与DECIMAL;
- FLOAT取余就超出我们的理解;
结论:取余就是整数的一种概念,不要对小数有所谓取余的想法。
最后我们当然不能忘记验证被0除的结果。
![874dcf5c77cd2f6e9b489ce7650b961b.png](https://i-blog.csdnimg.cn/blog_migrate/e6f73b951c372cb70aed65175df3f722.jpeg)
还好MySQL没给我们惊喜,涉及到算术运算,除数不能为0这个定理没被打破,只是返回的是NULL而非报错中断程序执行。
【4】字符串中的数字
先给出自己测试出的结论吧:
在MySQL当中,字符串类型间进行加减乘除运算的时候,会截取字符串以数字开头的那一部分数字进行运算,如果字符串前面没有数字,那么就只能截取的数值为0,那么进行加减的时候结果都是0,进行乘除的时候结果都是NULL。
看案例慢慢去理解。
select '1a'+'1b','15e'-'4'b,'15e'/'4b','2r'*'3s','r'/'s','2019-12-08'-'2019-12-08';
![9bbddcf119952371b0d123c4b72bd2d6.png](https://i-blog.csdnimg.cn/blog_migrate/70b8f7124bff46954f2d591d1b9286e1.jpeg)
总结
- 算术运算符有加减乘除及取余5种;
- 算术运算符不仅可以应用在数字,还可以应用于从字符串中抽取的数字。
所以,学习不能把自己的思维固化。