天天看点

mysql decimal转字符串_「7」分享些MySQL中算术运算符的灵活应用案例【1】建表【2】数据准备【3】数字的加减乘除【4】字符串中的数字总结

算术运算符是SQL中最基本的运算符,MySQL自然不能缺少对其的支持。

mysql decimal转字符串_「7」分享些MySQL中算术运算符的灵活应用案例【1】建表【2】数据准备【3】数字的加减乘除【4】字符串中的数字总结

既然其名称中有“算术”二字,给人的第一感觉当然是支持数字型的运算。所以我们先从数字着手了解它。

【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
           
mysql decimal转字符串_「7」分享些MySQL中算术运算符的灵活应用案例【1】建表【2】数据准备【3】数字的加减乘除【4】字符串中的数字总结

【2】数据准备

insert into num_oper01 values(3,3,3);insert into num_oper01 values(3,3.45,3.4);
           
mysql decimal转字符串_「7」分享些MySQL中算术运算符的灵活应用案例【1】建表【2】数据准备【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 decimal转字符串_「7」分享些MySQL中算术运算符的灵活应用案例【1】建表【2】数据准备【3】数字的加减乘除【4】字符串中的数字总结

结论:

  • MySQL会自动进行数据类型切换;
  • 切换的顺序是:INT --> FLOAT --> DECIMAL
  • MySQL会根据计算结果自动增加小数位数。

再来单独看看取余的计算效果:

mysql decimal转字符串_「7」分享些MySQL中算术运算符的灵活应用案例【1】建表【2】数据准备【3】数字的加减乘除【4】字符串中的数字总结

从执行效果可以看出:

  • INT与DECIMAL的取余还是INT与DECIMAL;
  • FLOAT取余就超出我们的理解;
结论:取余就是整数的一种概念,不要对小数有所谓取余的想法。

最后我们当然不能忘记验证被0除的结果。

mysql decimal转字符串_「7」分享些MySQL中算术运算符的灵活应用案例【1】建表【2】数据准备【3】数字的加减乘除【4】字符串中的数字总结

还好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';
           
mysql decimal转字符串_「7」分享些MySQL中算术运算符的灵活应用案例【1】建表【2】数据准备【3】数字的加减乘除【4】字符串中的数字总结

总结

  • 算术运算符有加减乘除及取余5种;
  • 算术运算符不仅可以应用在数字,还可以应用于从字符串中抽取的数字。

所以,学习不能把自己的思维固化。