数据库数据类型默认转换

在sql server中执行1/2 和在oracle中执行1/2结果是不同的,sql server中结果为0,在oracle结果为0.5.

这是为什么呢?关键在于不同数据库对数据类型的默认转换。

在SQL Server中当每一步的计算式中计算符的两边全部为整型时,它会自作聪明的将结果转为整型(而且是舍去小数位,直接截断,而不是四舍五入)。?

在Oracle中却不会这样自作聪明的。

所以在sql server中如果1.0/2 结果为0.500000,而在oracle中1/2 和1.0/2 结果都一样,都为0.5.

但是如果你想在sql server中得到想要的值,可以采用cast()或者convert()函数来类型转换。

SELECT CAST(1 AS decimal(9,2))/2;//把1转变为带精度的数字,结果为0.500000
SELECT CONVERT(decimal(9,2),1)/2;

?如果想对结果做处理,譬如保留小数点位数,四舍五入等,可以在结果上再次做类型转换或者函数运算。

SELECT CAST((CAST(1 AS decimal(9,2))/2) AS decimal(9,2));//保留两位小数
SELECT CONVERT(decimal(9,2),CONVERT(decimal(9,2),1)/2);//结果为0.50
SELECT ROUND(1.66777,3,7);//第二个参数为舍入的精度,第三个参数如果指定了 0(类型为tinyint、smallint 或 int) 以外的值,则将做截取操作。结果为1.66700
SELECT ROUND(1.66777,3);//第三个参数如果省略或其值为0(默认值),则将做四舍五入操作。结果为1.66800

?

?

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。