提问人:Mark 提问时间:8/8/2019 最后编辑:ScaisEdgeMark 更新时间:8/8/2019 访问量:3003
当 SQL 中的两个值具有不同的数据类型时,如何将它们与给定的十进制精度进行比较?
How can I compare two values in SQL to a given decimal precision when they are of different data types?
问:
我试图证明使用 EXCEPT 查询的两个表之间没有显着差异。我只包括我关心比较的字段。问题在于,由于其中一个表的数据采用浮点格式,而另一个表具有 Decimal(24,7),因此在结果集中发现了大量差异。我希望我的 EXCEPT 查询仅包含大于 1 的差异。
我尝试将浮点数转换为 Decimal(24,7) 以及将两者都转换为 Decimal(24,2),但由于四舍五入,仍然存在差异。例如,一个表可能显示 2.55,另一个表显示 2.5499999。这被标记为差异。如果我截断这些值,我仍然会得到差异(2.55 与 2.54)。如果我对它们进行四舍五入或强制转换为 Decimal(24,2),则此特定实例是固定的,但其他实例会显示(例如,四舍五入 2.355 与 2.35499999 会导致 2.36 与 2.35)。
如何对十进制值进行强制转换或舍入,以便我的 EXCEPT 查询不会返回任何小于 1 的差异?
示例代码:
SELECT name, weight FROM Table1
EXCEPT
SELECT name, weight FROM Table2
/* 这返回了数千个差异。如果我将两个权重都转换为 Decimal(24,2),我得到的差异要少得多,但我只想显示大于 1 的差异。*/
答:
2赞
Gordon Linoff
8/8/2019
#1
这可能不适合 。但您可以尝试使用较少的小数位:EXCEPT
SELECT name, CAST(weight as DECIMAL(24, 3)) FROM Table1
EXCEPT
SELECT name, CAST(weight as DECIMAL(24, 3)) FROM Table2;
或者,您可以使用:NOT EXISTS
SELECT name, weight
FROM Table1 t1
WHERE NOT EXISTS (SELECT 1
FROM table2 t2
WHERE t2.name = t1.name AND
ABS(t2.weight - t1.weight) < 0.00001
);
评论
0赞
Mark
8/8/2019
我尝试使用较少的小数位,甚至精确到零,但我仍然得到几百个差异(都小于 1)。我会尝试你的不存在建议。谢谢!
评论