繁体   English   中英

MySQL案例无效ROUND值

[英]MySQL Case not working ROUND the value

我正在尝试ROUND()或不是所选的值。 查询看起来像这样:

SELECT  b.Series,
        CASE 
            WHEN Series = 'DMS' THEN ROUND(b.Quantity,0)
            ELSE ROUND(b.Quantity,2)
        END AS Quantity
        FROM bill b

我也试过了

CASE Series
     WHEN 'DMS' THEN ROUND(b.Quantity,0)
     ELSE ROUND(b.Quantity,2)
END AS Quantity,

IF(b.Series = 'DMS', ROUND(b.Quantity,0), ROUND(b.Quantity,2)) AS Quantity,

每次我在最后得到2位小数。

Series为'DMS'时, Quantity应该像一个整数(不含小数),在其他情况下, Quantity应该有两个小数。

在结果集中,数据类型是整个结果集的的属性。

对于结果集中的任何给定列,每列中该列的值必须具有相同的数据类型。

必要时,此查询的返回列的数据类型将由服务器设置为DECIMAL(11,2) ,以便容纳所有可能的值。

我预计你所看到的实际上是正确的四舍五入,但结尾有一个“意外的” .00

CAST(CASE ... END AS CHAR) AS Quantity - 可能 - 通过将所有内容都转换为字符串来获得看起来更像您期望的结果。

这显然是一些非常草率的类型处理,但它并不比预期不同类型出现在同一列中更不合理......这是不可能完成的。

更正确的解决方案是将它们作为两个不同的列返回,使用两个CASE表达式或IF()

ROUND(IF(Series = 'DMS',b.Quantity,NULL),0) AS dms_quantity,
ROUND(IF(Series = 'DMS',NULL,b.Quantity),2) AS non_dms_quantity

请注意,两个IF()测试都评估相同的表达式并使其参数反转而不是使用!=且参数相同的第二个参数,因此,如果可能,系列的NULL值将由第二个测试正确处理。 (Anything!= NULL无法求值为true; IF()的第三个参数用于FALSE和NULL结果)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM