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

wil*_*iam 48 sql-server sql-server-2005

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

我想这样做:

select col1/col2 from tbl1
Run Code Online (Sandbox Code Playgroud)

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

我想要的结果是 1.1

我说round(col1/col2,2).结果仍然是1.

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

我怎么能完全得到1.1?

And*_*y M 101

另一种方法:

SELECT col1 * 1.0 / col2 FROM tbl1
Run Code Online (Sandbox Code Playgroud)

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

Aleksandr Fedorenko在评论中暗示的略微变化:

SELECT col1 * 1. / col2 FROM tbl1
Run Code Online (Sandbox Code Playgroud)

效果基本相同.唯一的区别是在这种情况下的乘法结果将是数字(12,0).

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


Shi*_*mar 45

在分割之前,您需要将值转换或转换为十进制.看看这个 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)
Run Code Online (Sandbox Code Playgroud)

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


ben*_*siu 14

SELECT CAST (col1 as float) / col2 FROM tbl1

一个演员应该工作.("少即是多.")

来自联机丛书:

返回具有更高优先级的参数的数据类型.有关数据类型优先级的详细信息,请参阅数据类型优先级(Transact-SQL).

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


小智 5

CAST( ROUND(columnA *1.00 / columnB, 2) AS FLOAT)
Run Code Online (Sandbox Code Playgroud)