SQL中用于分割结果的十进制值

时间:2011-01-29 03:31:26

标签: sql-server sql-server-2005

在SQL中,我有col1col2。两者都是整数。

我想这样做:

select col1/col2 from tbl1

我得到结果1 col1=3col2=2

我想要的结果是1.1

我放round(col1/col2,2)。结果仍然是1。

我放decimal(col1/col2,2)。小数不是在函数中构建的。

我怎样才能完全获得1.1?

6 个答案:

答案 0 :(得分:93)

另一种方法:

SELECT col1 * 1.0 / col2 FROM tbl1

乘以1.0会将整数转换为 float numeric(13,1),因此类似于类型转换,但很可能它比它慢。

评论中Aleksandr Fedorenko建议的稍微缩短的变体:

SELECT col1 * 1. / col2 FROM tbl1

效果基本相同。唯一的区别是这种情况下的乘法结果是numeric(12,0)

主要优势:比其他方法更少罗嗦。

答案 1 :(得分:39)

您需要在分割之前将值转换或转换为十进制。看看这个 http://msdn.microsoft.com/en-us/library/aa226054.aspx

例如

DECLARE @num1 int = 3 DECLARE @num2 int = 2

SELECT @num1/@num2

SELECT @num1/CONVERT(decimal(4,2), @num2)

第一个SELECT将导致您看到的内容,而第二个SELECT将获得正确答案1.500000

答案 2 :(得分:13)

SELECT CAST (col1 as float) / col2 FROM tbl1

一个演员应该工作。 (“少即是多。”)

来自Books Online

  

返回优先级较高的参数的数据类型。有关数据类型优先级的更多信息,请参阅Data Type Precedence (Transact-SQL)

     

如果整数被除数除以整数 divisor ,则结果是一个整数,其结果的任何小数部分都被截断

答案 3 :(得分:3)

可能还有其他方法可以获得理想的结果。

Declare @a int
Declare @b int
SET @a = 3
SET @b=2
SELECT cast((cast(@a as float)/ cast(@b as float)) as float)

答案 4 :(得分:3)

CenterY

答案 5 :(得分:0)

只需将分母转换为小数,例如除

select col1 / CONVERT(decimal(4,2), col2) from tbl1