在SQL中,我有col1
和col2
。两者都是整数。
我想这样做:
select col1/col2 from tbl1
我得到结果1
col1=3
和col2=2
我想要的结果是1.1
我放round(col1/col2,2)
。结果仍然是1。
我放decimal(col1/col2,2)
。小数不是在函数中构建的。
我怎样才能完全获得1.1?
答案 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