2014-04-21 48 views
0

我有一個查詢應該顯示一些基於特定條件的數據。將百分比字段轉換爲浮點型時出現錯誤結果

當顯示的數據我有我的查詢以下條件:

cast(percentage as float)/100 < 0.50)應該給我值小於50%。

但是,當執行查詢時,它給了我值95,100 ...但從未給我小於0.50,即使我在查詢中指定條件。

在做從表中的單個選擇檢查值有什麼,我得到0.95:

select cast(percentage as float)/100 from table1 where id ='1111'

我在做什麼錯?什麼是解決方案?


這是我的where子句:

WHERE msystem = '111' 
AND (
    (code = '2222' AND cast(percentage as float)/100 < 0.50) 
    OR (code = '3333') 
    ) 
+0

您可以發佈更多的查詢 - 或者至少更多WHERE子句?你有'OR'條件嗎?這可以根據運算符優先級來改變結果。 –

+0

該查詢是正確的。現在我將更新我的帖子 –

+0

當處理Float數據類型時,您將在計算中得到意想不到的結果,因爲float是虛數/近似數字,當您對虛數進行計算時/近似結果也將是虛數/近似值。要獲得確切的值,請使用數字或十進制等確切數據類型之一。 –

回答

0

這裏此代碼:

(code = '2222' AND cast(percentage as float)/100 < 0.50) 
    OR (code = '3333') 

也就是說的或第二件(碼= '3333')被允許結果即大於0.50

您的方式您現在寫的where子句會顯示代碼爲'3333'且只有代碼='2222'小於0.50的結果

+0

我需要這兩個條件在特定的日期之間,所以這就是爲什麼我把它們放在同一個括號之間。 –

+0

好的,但仍然是,如果你這樣寫,你允許代碼='3333'的值,並沒有百分比驗證會導致結果超出你最初尋找的範圍。如果您只想將值限制爲僅限於**的值,那麼您需要將限制放在兩個代碼上。你可以嘗試的一件事是使用一個驗證而不是另一個,看看結果是什麼。這至少應該縮小你看到問題的地方。 – rhealitycheck

+0

謝謝你,男士,你的幫助。 –