如何通过使用T-SQL将两个整数值相除来获得浮点结果?


173

使用T-SQL和Microsoft SQL Server,当我在2个整数之间进行除法时,我想指定小数位数:

select 1/3

目前返回0。我希望它回来0,33

就像是:

select round(1/3, -2)

但这是行不通的。如何获得理想的结果?


3
您是否尝试过1.0 / 3?
Thilo 2012年

我得到的答案绰绰有余
LaBracca 2012年

Answers:


277

如果您正在寻找一个常数,那么stb和xiowl的建议就很好。如果需要使用现有的整数字段或参数,则可以将它们首先转换为浮点数:

SELECT CAST(1 AS float) / CAST(3 AS float)

要么

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

如果需要十进制结果,也可以将它们转换为十进制。
2014年

30
SELECT 1.0 * MyInt1 / MyInt2
Troglo 2015年

@TroubleZero供MySQL使用decimal
itsazzad

非常感谢,您保存了我的一天。我尝试过CAST(7/3 AS float),但再次返回2。因此,强制转换数字解决了我的问题。
YasinYörük16年

3
无需同时使用除数和除数,请参阅@MS的答案stackoverflow.com/a/30639343/2866644
robotik

70

因为SQL Server执行整数除法。试试这个:

select 1 * 1.0 / 3

当您将整数作为参数传递时,这将很有帮助。

select x * 1.0 / y

1
您甚至可以忽略零。
约翰·



13

我了解在MySQL中不允许CASTing to FLOAT,并且当您尝试CAST(1 AS float)按照MySQL开发人员的说明进行操作时,将会引发错误

解决方法很简单。做就是了

(1 + 0.0)

然后使用ROUND以达到特定的小数位数,例如

ROUND((1+0.0)/(2+0.0), 3)

上面的SQL将1除以2,并返回一个浮点数到3个小数位,就像它将是0.500

可以CAST使用以下类型:binary,char,date,datetime,decimal,json,nchar,signed,timeunsigned


3
MySQL允许CAST,但不允许强制转换FLOAT。强制DECIMAL改为。参见例如stackoverflow.com/questions/7368163/…
markusk

7

看起来这个技巧在SQL Server中有效,并且更短(基于先前的答案)

SELECT 1.0*MyInt1/MyInt2

要么:

SELECT (1.0*MyInt1)/MyInt2

2
我最喜欢这个,甚至对百分比计算看起来也不错:SELECT 100.0 * @Elapsed / @Total
EliSherer

3

用这个

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

在此sql中,首先将其转换为浮点数或乘以1.00。哪个输出将是浮点数。在这里我认为2位小数。您可以选择所需的内容。


2

如果您来这里(就像我一样)来找到整数值的解决方案,那么答案是:

CAST(9/2 AS UNSIGNED)

返回5

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.