为什么结果看起来是一样的,但是用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
就会被去掉,要么,好像也确实没有什么好办法,有的话麻烦留言哈哈哈哈~~
完!