算术运算符是SQL中最基本的运算符,MySQL自然不能缺少对其的支持。
既然其名称中有“算术”二字,给人的第一感觉当然是支持数字型的运算。所以我们先从数字着手了解它。
【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
【2】数据准备
insert into num_oper01 values(3,3,3);insert into num_oper01 values(3,3.45,3.4);
结论:从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;
结论:
- MySQL会自动进行数据类型切换;
- 切换的顺序是:INT --> FLOAT --> DECIMAL
- MySQL会根据计算结果自动增加小数位数。
再来单独看看取余的计算效果:
从执行效果可以看出:
- INT与DECIMAL的取余还是INT与DECIMAL;
- FLOAT取余就超出我们的理解;
结论:取余就是整数的一种概念,不要对小数有所谓取余的想法。
最后我们当然不能忘记验证被0除的结果。
还好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';
总结
- 算术运算符有加减乘除及取余5种;
- 算术运算符不仅可以应用在数字,还可以应用于从字符串中抽取的数字。
所以,学习不能把自己的思维固化。