Py学习  »  DATABASE

SQL优化大神玩转MySQL函数系列(一)

老叶茶馆 • 4 年前 • 120 次点击  

导读:

本文节选自松华老师的《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


大家请看,上述图片中的最后一个,是不是很有意思!

是不是符合本文需求!


谢谢大家~ 欢迎转发

如有关于SQL优化方面疑问需要交流的,请加入QQ群579036588),并@骑兔子的龟 就可与我联系


END



点击下图小程序订阅
松华老师的《SQL优化专栏》
get更多优化技能







扫码加入MySQL技术Q群

(群号:579036588)

   



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37781
 
120 次点击