在数据库中的计算中获取十进制值

时间:2014-09-12 06:54:04

标签: sql-server decimal netezza calculated-field

最近,我遇到了一个异常现象,即在划分两个整数的同时,我只得到了商数,而且只是忽略了提醒。

SELECT 12/8,12%8 

上面的查询分别给出1和4,类似于Java / C编程。再次应用下面计算中使用的Java / C编程方法来获得期望值。

SELECT 12.0/8,12/8.0

答案分别为1.5000和1.5000。 处理我的任务我得到一个情况,以获得两个计数值(整数)的百分比值,我坚持使用类似于前一个查询的结果。然后我通过将其中一个值乘以1.0来计算出相同的结果。这解决了我的问题。

但是稍后,通过我的项目(长期开发)中使用的几个脚本,我注意到在某些情况下,即使两个计数值(整数)被分割,也会从查询中返回十进制值。

我在Netezza首先注意到了这一点。但在SQL Server中也是如此。

请告知确定返回值的数据类型的基础。

1 个答案:

答案 0 :(得分:0)

当分割两个整数时,它将执行整数除法,它返回一个整数。要执行浮点除法,必须将一个或两个操作数转换为float / decimal / double。

SELECT cast(12 as float)/8
SELECT 12/cast(8 as float)
SELECT cast(12 as float)/cast(8 as float)
SELECT cast(12/8 as float)

请注意,最后一个查询是不同的,因为在转换为float之前首先执行整数除法,这就是十进制值已经丢失的原因。