【发布时间】:2018-07-10 21:48:55
【问题描述】:
我最近在 ETL 过程中遇到了一个奇怪的案例,结果对我来说似乎无法预测。我读过Difference between numeric, float and decimal in SQL Server,但我不认为这是溢出或小数精度问题。
场景:
SQL Server 2008 SP3 中的源表“test”,a 列声明为数字 (38,6)。
结果首先转换为 real,然后转换为 int。如果从 numeric 直接转换为 int,则不会出现此问题。
结果:
SELECT a,CAST(a as real) as real_a,CAST(CAST(a as real) as int) as int_a FROM test;
- 电话:778881838.810000
- real_a: 7.78819E+08
- int_a: 778881856
在 SQL Server 2017 (sql fiddle) 中运行的相同实验给出了以下结果: http://sqlfiddle.com/#!18/45aca/2
a: 778881838.81
real_a: 778881860
int_a: 778881856
我可以(模糊地)理解 ..19E+08 的情况,但是为什么在双重转换的情况下会有 +18 的差异?这个数字对我来说似乎完全是任意的。
【问题讨论】:
标签: sql sql-server types