sql - 当 SQL 中的两个值具有不同的数据类型时,如何将它们与给定的十进制精度进行比较?
问题描述
我试图证明使用 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 的差异。*/
解决方案
这可能不适合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
);
推荐阅读
- go - golang:无法从 go/parser 使用或下载 Parser
- python - 将相对路径解析为 Python 中的另一个相对路径
- c# - UI 未从组件更新
- javascript - 三.js通过自定义属性获取Object3D
- python - 为图形添加框架
- c# - 使用声明转换时丢失的自定义声明主体类型
- java - Java回文检查器给出错误答案
- python-3.x - python3中的math.remainder()和math.fmod()有什么区别?
- rdf - 尝试使用 tdb2.tdbloader 加载 Wikidata truthy-latest.nt 导致代码:58/PROHIBITED_COMPONENT_PRESENT in USER
- python - pytorch spyder 变量资源管理器中断