[英]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.