簡體   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