【问题标题】:Float Column Equal浮动列相等
【发布时间】:2018-03-25 22:07:20
【问题描述】:

我使用 SQL Server 2005。我在表 (ref, column1, column2) 中有三列。第 1 列和第 2 列是浮点数,ref 是 1,column1 是 1000,column2 是 1000。

select * 
from table 
where ref = 1 and column1 = column2

返回 0 行

我将它们转换为十进制,它们是相同的。

它们看起来相等,但查询返回它们不相等。怎么可能?

编辑:

Here is the screenshot. They are not same. What causes this and how can i fix it?

【问题讨论】:

  • 向我们展示几行示例数据,其中一行包含您的示例 1,1000,1000。查看表的 DDL 也会很有帮助。
  • 很可能值不一样。运行SELECT CAST(column1 AS binary(8)) AS column1, CAST(column2 AS binary(8)) AS column2 FROM table WHERE ref = 1;
  • 您可以尝试... where ref = 1 and Abs( column1 - column2 ) < 0.001 将差异与 iota 进行比较。根据值的范围,与值的一小部分进行比较而不是绝对限制可能更有意义,例如Abs( column1 - column2 ) < Abs( column1 * 0.001 ).
  • 我添加了截图

标签: sql sql-server tsql compare equals


【解决方案1】:

浮点类型是一个近似值。在比较中使用它的最佳方法是首先将其转换为整数或小数:

CAST(Revenue AS NUMERIC(10,2))

【讨论】:

    【解决方案2】:

    但我得到一行来运行以下查询。请检查。

    DECLARE  @TABLE TABLE (REF INT,COLUMN1 FLOAT,COLUMN2 FLOAT)
    INSERT INTO @TABLE
    SELECT 1,1000,1000
    
    SELECT * FROM @TABLE WHERE REF = 1 and COLUMN1 = COLUMN2
    

    谢谢。

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 2017-10-18
      • 2011-05-01
      • 2011-11-04
      • 2014-10-17
      • 2012-09-04
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多