导读:
本文节选自松华老师的《SQL优化专栏》 郑松华,知数堂SQL 优化班老师 现任 CCmediaService DBA,主要负责数据库优化相关工作 擅长SQL优化 ,数据核对
想阅读更多内容请点击订阅专栏
背景说明:
继有趣的SQL系列文章后,本次准备开关于“MySQL 函数应用”的系列文章。
这个系列,不是不符合实际的简单介绍函数的用法。
本系列将根据实际需求出发,介绍MySQL函数以便大家能更好的记住函数。
原来计划命名为“ MySQL 函数应用”此名并不能表达本意。
故而还是用回“MySQL 函数应用”命名。
需求说明:
因为,本人工作在韩国,这个需求也是从韩国实际出发的。
因为韩元的面额相对比较大,很多时候最小单元需要归零
比如: 20001元 需要 变成 20000元 ,20015 变成 20010 这样
今天的案例就是上面的实际案例,在MySQL 是怎么解决的,并且介绍几个函数。
本次案例是在MySQL 8.0 版本中
如上图所示, 我们需要把 其中的三行数 分别变成 20000,20000,20010
面对这个问题,我们肯定有很多解决方法。
如果大家学过Java 或者别的语言的话,有时候认为,只要循环+选择 就可以写出很多方法一样,在SQL中,你也可以使用case when语句实现你要的功能,但本文题目是:使用函数还是使用特定的函数来解决这个问题。
解决方案:
方法1、FLOOR 函数
在这介绍的函数,首先是 FLOOR 函数
MySQL 8.0参考手册函数说明:
https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_floor
简单来说就是,返回x的最大整数值,那我们怎么用这个函数呢?
这个函数只能处理小数点部分,20001 也不是小数!不是小数我们可以把它变成小数,即想对个位数清零我们只需要先除以10 然后调用floor 。
然后,对结果乘以10 就可以达到我们的目的了!
扩展以下 ,如果需求变成十位数以下都清零就变成 先除以100。
然后调用floor 然后对结果乘以100 就可以达到我们的目的了。
如果本次介绍的函数到这结束, 就有点太可惜,因为我们是依据案例介绍函数,
所以,肯定不止一个方法来解决。
方法2、TRUNCATE函数
今天介绍的第二个函数叫做 TRUNCATE
MySQL 8.0参考手册函数说明:
https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_truncate
大家请看,上述图片中的最后一个,是不是很有意思!
是不是符合本文需求!
谢谢大家~ 欢迎转发
END