`
luhantu
  • 浏览: 205177 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据库数据类型默认转换

阅读更多

在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

 

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics