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

摘要:
我们可以将字段类型定义为十进制,插入的值将自动填充两位小数。如果您查询的字段为空,MySQL仍然会自动为您填充零;0)ASCHAR)3。解决方案是SELECT0+CAST(IFNULL(T.PREPAYMOUNT),它消除了自动填零的问题。它还删除了值的自动零填充。如果前者的值为0或null。
 

1.情景展示

MySQL 查询decimal字段去除自动补零第1张

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

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

  问题在于:

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

MySQL 查询decimal字段去除自动补零第2张

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

2.原因分析

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

  语法:

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

MySQL 查询decimal字段去除自动补零第3张

MySQL 查询decimal字段去除自动补零第4张

3.解决方案

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

MySQL 查询decimal字段去除自动补零第5张 

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

MySQL 查询decimal字段去除自动补零第6张

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

  正确的方式应该是:

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

MySQL 查询decimal字段去除自动补零第7张

4.拓展

再来个高级点的;

MySQL 查询decimal字段去除自动补零第8张

  现在这两个字段都是保留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

MySQL 查询decimal字段去除自动补零第9张

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

MySQL 查询decimal字段去除自动补零第10张

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

MySQL 查询decimal字段去除自动补零第11张

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

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

写在最后

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

 相关推荐:

 

免责声明:文章转载自《MySQL 查询decimal字段去除自动补零》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇freeswitch用户整合(使用mysql数据库的用户表)钉钉第三方个人应用身份验证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQLServer根据时间段查询数据

今天一同事发现一个SQLServer语句执行特别慢,检查后发现是 条件 加上了 时间段 ,之前使用的是  时间字段 between xxx and xxx这样的方式,遂更改时间判断方法, ----------dafediff----------返回两个时间点的差,可选单位 yy,mm,dd,hh,ss等 查询今年的数据  : select * from d...

使用PHP开发HR系统(3)

    本节我们讲述如何创建主页。 ================================================================================================== 我们首先来理解CI框架的运行机制,以下是CI官方网站上的介绍: 下图说明了整个系统的数据流程: index.php 文...

excel文件使用navicat工具导入mysql的方法

1、在excel文件的sheet上,第1行下面插入一行,对应DB里面的字段名称,方便后面导入时做字段匹配: 2、使用Navicat ,打开工具,选择表所在的数据库,然后点击数据库名字,右键Tables,出来下拉菜单选择import wizard(中文版:导入向导).弹出一个选择界面,选择excel file文件 3、点击next(下一步),选择对应...

ES入门 (5) 语法(3)DML(2)映射操作 创建映射/查看映射/索引映射关联/

有了索引库,等于有了数据库中的 database。 接下来就需要建索引库(index)中的映射了,类似于数据库(database)中的表结构(table)。创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。 1 创建映射 在 Postman 中,向 ES...

SpringBoot整合c3p0、Druid数据库连接池

1、C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,同时在Hibernate、Spring项目开发中被广泛应用。修改项目的pom.xml配置文件,添加C3P0依赖支持管理,由于要连接mysql,所以也要加入mysql的依赖包,如下所示: 1 <?xml version="1.0" enco...

深度学习——0 神经网络初探

1.历史渊源 深度学习(deep learning)和神经网络(netural networks)这几年随着“阿尔法狗”以及ImageNet挑战赛的兴起而被炒得火热,然鹅这俩大兄弟已经不是生面孔了,而可以算是“老家伙了”。早在1943年,McCulloch and Pitts就设计了一个简单的神经元模型。之所以叫做神经元模型,是因为它的工作原理是模仿人类的...