2013-10-21 97 views
0

我想查詢數據庫的東西,如:SQL查詢不等於0.00

select q.column1, q.column2 
from table q 
where q.column1 <> 0.00 

但結果返回0.00。該列包含數字值。我試過'不是',<>和!=但似乎沒有任何工作。

+4

它可能是一個舍入問題? –

+5

什麼數據類型是'column1'的? – peterm

+0

你可以把'0'而不是'0.00'嗎? –

回答

0
SELECT A.column1, A.column2 
FROM (SELECT CAST(q.column1 AS DECIMAL(10,2)) AS column1 , 
      CAST(q.column2 AS DECIMAL(10,2)) AS column2 
     FROM [table] q) A 
WHERE A.column1 <> 0.00 
+0

謝謝。我使用了CAST並能夠獲得更好的結果,儘管這並沒有消除所有的0.00。 – user2904454

1

是否column1approximate numeric data type?像floatreal

如果是這樣,那些數據類型不準確。在處理近似數字時,您應該避免使用相等的=運算符。

更好的方法是檢查近似數字是否接近您正在查找的數字。您可以使用abs([TargetValue] - [YourColumn]) < [SmallNumber]爲:

where abs(0 - q.column1) < 0.0001 

它是如何出錯的例子:

create table t1 (descr varchar(max), nr float); 
insert t1 values 
    ('1E-307', 1E-307), 
    ('1E-308', 1E-308), 
    ('0', 0); 

select * from t1 where nr = 0 

這將打印

descr nr 
1E-308 0 
0  0 

1E-307行丟失,但1E-308行是目前:)

+0

Column1是(numeric(10,2),null) 我不知道它是否是一個近似的數字數據類型。我怎麼能找到這個? – user2904454

+0

'數字'是一個確切的數據類型。你能在http://sqlfiddle.com重現這個問題嗎? – Andomar