【问题标题】:SQL query not equal to 0.00SQL 查询不等于 0.00
【发布时间】:2013-10-30 09:54:27
【问题描述】:

我正在尝试使用以下内容查询数据库:

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

但结果返回 0.00。该列包含数值。我尝试了“不是”、 和 !=,但似乎没有任何效果。

【问题讨论】:

  • 会不会是四舍五入的问题?
  • column1 属于什么数据类型?
  • 你能把 0 换成 '0.00' 吗?
  • select q.column1, q.column2 from table q where ROUND(q.column1,2) &lt;&gt; 0.00 测试其舍入问题是否如@MikyDinescu 建议的那样
  • 是数值数据类型

标签: sql sql-server select where


【解决方案1】:

column1approximate numeric data type 吗?喜欢floatreal

如果是这样,这些数据类型不准确。在处理近似数时,应避免使用相等 = 运算符。

更好的方法是检查近似数字是否接近您要查找的数字。您可以为此使用abs([TargetValue] - [YourColumn]) &lt; [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 的行:)

【讨论】:

  • Column1 is (numeric(10,2), null) 不知道是不是近似数值数据类型。我怎么能找到这个?
  • numeric 是一个精确的数据类型。你能在sqlfiddle.com 重现问题吗?
【解决方案2】:
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

【讨论】:

  • 谢谢。我使用了 CAST 并且能够获得更好的结果,尽管这并没有消除所有的 0.00。
猜你喜欢
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
相关资源
最近更新 更多