sybaseIQ运算怪象
select (10578+12294)/2,(10578+12294+12972)/3,(10578+12294+12972+12255)/4,(10578+12294+12972+12255+15356)/5;--sybase IQ: 11436,-9897,-4359,-416 (错误值)
--SQL Server 2000:11436,11948,12024,12691(正确值)
问题:为什么会出现负数??? select 11111+11111+11111
结果也是错误的,为
-32203
显然是数据溢出了嘛,应该是数据类型的问题
IQ默认是 smallint 类型的,2个字节,能容纳的整数范围 (-32768 ~ +32767)SQL Server默认是 int 类型,4个字节,能容纳上亿的整数范围,很大了
select convert(int, 11111) + 11111 + 11111
结果为 33333: “短”的数据类型,自动会往“长”的数据类型转换,所以只要给它一个int型,其它都会自动转成int型,这样就不会溢出了。
页:
[1]