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