2011-10-12 54 views
0

enter image description here我有一個MySQL表,其中一個字段是variation和類型是float。它的值是0.2。但是,當我查詢如WHERE variation = '0.2'它沒有顯示結果,而是它返回null。我做錯了什麼?SQL字段類型字段沒有顯示

SELECT * FROM tbl_products 
    WHERE frequency BETWEEN '2' AND '3' 
    AND gain = '2' 
    AND gain_variation = '0.2' 
    AND noise = '2' 
    AND power = '10' 
+0

什麼口味SQL的? –

+0

@pekka我正在使用MySQL – Nitish

+0

你的表是否有滿足你的整個'WHERE'子句的行?請向我們展示您期待的行。 –

回答

3

刪除數字後面的引號再試一次。

WHERE variation = 0.2

編輯:Peeka指出,引號不要在MySQL的關係。

您是否確定float的值恰好爲0.2,並且沒有顯着數字變得圓整?你可以嘗試使用BETWEEN 0.19 AND 0.21並查看你所在的行是否被返回(我知道它不是一個等價的查詢,並可能返回不需要的結果,但它會測試該值是否恰好爲0.2或是否在客戶端中舍入)。

編輯2:我打賭這是因爲做MySQL存儲彩車 - 從他們的手動拍攝:

浮點數有時會導致混淆,因爲它們是近似的,而不是存儲爲精確值。寫入SQL語句中的浮點值可能與內部表示的值不同。

這裏看到更多的信息:http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html

建議使用範圍,而不是過濾相等的,所以如果你使用BETWEEN 0.19 AND 0.21你得到你想要的結果?

+0

The引用不應該是一個問題,至少不是如果使用的數據庫是mysql。 –

+0

@mwan我試過但結果相同! – Nitish

+0

@Nitish:你可以發佈你的整個查詢嗎?你確定你的區域設置使用小數點不是一個例子)? – mwan

0

試試; TO_CHAR(變化)= '0.2'

請檢查該鏈接,很可能這將幫助:

Selecting a float in MySQL

+0

他使用mySQL –

1

每討論@ mwan的答案,考慮使用INT是字段而不是FLOAT。當您連續行INSERT時,您可以乘以10的某個冪(取決於您需要的精度水平),並且當您SELECT時,您可以用相同的冪數除以10,但由於字段爲INT,您可以始終相信你的WHERE子句將匹配正確的行:

CREATE TABLE `tbl_products` (
    frequency    INT, 
    gain     INT, 
    gain_variation_x100 INT, # give it a name that will remind you 
    noise     INT, 
    power     INT 
); 

INSERT INTO `tbl_products` VALUES 
    ('1', '2', '0.2' * 100, '2', '10'), 
    ('2', '2', '0.2' * 100, '2', '10'), 
    ('2', '2', '0.5' * 100, '2', '10') 
    #    ↑ 
    #     `---- multiply here 
; 

SELECT *, ROUND(gain_variation_x100/100, 1) AS gain_variation 
    FROM tbl_products #    ^---. ^---- show 1 digit of precision 
    WHERE frequency BETWEEN '2' AND '3' # \ 
    AND gain = '2'     # `----- divide here 
    AND gain_variation_x100 = ROUND('0.2' * 100) 
    AND noise = '2' #     ^----- multiply here 
    AND power = '10' 
; 

你可以看到這個在這裏工作:http://sqlize.com/829275n1Fc