• MySQL 查询decimal字段去除自动补零


    1.情景展示

      在MySQL中,我们可以将字段类型定义为decimal,这样就可以设置保留的小数位。

      在执行插入操作的时候,即使你插入的是整数,插入的数值将会自动为你补齐2位小数,这本身是没有问题的;

      问题在于:

      当如果你查询的字段为空时,如果使用0来替代,MySQL依然会为你自动补零,如下图所示:

      这本身也不算是太大的毛病,既然结果都是0了,在我这里需求是:不让它自动补零,如何实现?

    2.原因分析

      先将0转换成字符串,再转回数值类型;

      语法:

      0 + CAST(IFNULL(COLUMN,0) AS CHAR)

    3.解决方案

    SELECT  0 + CAST(IFNULL(T.PREPAYAMOUNT, 0) AS CHAR) PREPAYAMOUNT from cz_fet_main_mz t;  

     

      虽然当结果为0时,去掉了自动补零的问题,但是,它也把有数值的自动补零给去掉了,加上去重,查询结果如下:

      这根本不是我们想要的结果;

      正确的方式应该是:

    SELECT IF(0 + CAST(IFNULL(T.PREPAYAMOUNT, 0) AS CHAR)=0, 0, T.PREPAYAMOUNT) PREPAYAMOUNT from cz_fet_main_zy t
    

    4.拓展

    再来个高级点的;

      现在这两个字段都是保留2位小数;

      可以都为空,也存在只有其中一个有值;

      现在,想实现的效果是:

      前者有值,取前者,前者的值如果为0或null时,取后者,后者结果必须>=0。

    SELECT IF(0 + CAST(IFNULL(T.DBBXBX, 0) AS CHAR)=0, IF(0 + CAST(IFNULL(T.DEBXBX, 0) AS CHAR)=0, 0, T.DEBXBX), T.DBBXBX) DE_DBBXBX from cz_fet_main_zy t
    

      这里不能看到囊括的所有信息,我们可以去一下重

      如果值为0的话,自动补了零,这不符合我们的要求呀,那我们再用distinct试一下;

      我们会发现,不管是用distinct还是group by,会自动对其进行补零操作,不知道这是为什么,我觉得是数据类型发生了变化。

      不管怎样,上面的SQL是可行的。

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

  • 相关阅读:
    django之路由层(反向解析)总结
    django 路由层(反向解析)03
    Django 文件配置、pycharm及django连接数据库、表的增删改查 总结
    Django 之 文件配置、pycharm及django连接数据库、创表及表的增删改查02
    Django框架简介(1)
    编程语言类别;运行Python程序的方式;变量和常量;Python程序的垃圾回收机制;
    Python语法之垃圾回收机制
    前端js之BOM和DOM操作
    前端js之JQuery
    获取当前应用信息
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/14992072.html
Copyright © 2020-2023  润新知