为什么结果看起来是一样的,但是用except就是不一样,SQL

2020-03-24  本文已影响0人  HappyJoo

今天这个问题真的是搞了我很久,所以记录一下,如果能帮到谁就很好了哈~

首先说一下原因:浮点数 float 为表示很大的数,丢失了部分精度。也就是说,同样是20位小数,decimal 的全是零,但是 float 由于精度不准,后面会开始浮动数字。

两个table,A 和 B,同一条数据,看起来都是:

select click from A
union all
select click from B

得到结果:

1 1230.4444
2 1230.4444

看起来一模一样的,但实际上,他们的精度不一样。

table A 的 click 是 numeric 的,
table B 的 click 是 float

问题就在这里,float 的精度是不那么精确的,所以表面上他们看起来是一样的,但如果你用这样看:

select cast(click as decimal(20,15)) from A
union all
select cast(click as decimal(20,15))from B

实际上他们是:

1 1230.44440000000000
2 1230.44440000000732

当然其他的不一定是 732 啦,反正就是会不一样,所以实际上他们是不一样的。

所以解决办法,要么都变成四位小数,这样后面的732就会被去掉,要么,好像也确实没有什么好办法,有的话麻烦留言哈哈哈哈~~

完!

上一篇下一篇

猜你喜欢

热点阅读