数据库数据类型默认转换

本文解析了SQLServer与Oracle中整数除法的不同结果原因,主要归咎于两者对数据类型的默认转换方式各异。在SQLServer中,若参与运算的双方皆为整数,则结果会被强制转换为整数类型并截断小数部分;而Oracle则不进行此类默认转换。文中还提供了通过使用CAST或CONVERT函数在SQLServer中实现期望结果的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值