如何通过使用T-SQL划分两个整数值来获得一个浮点结果?

使用T-SQL和Microsoft SQL Server,我想指定十进制数字的数量,当我做2个整数之间的除法,如:

select 1/3

它当前返回0。我希望它返回0,33

喜欢的东西:

select round(1/3, -2)

但这行不通。我怎样才能达到预期的结果?

410542 次浏览

使用

select 1/3.0

这个就行了。

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

select 1 * 1.0 / 3

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

select x * 1.0 / y

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

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

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

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

SELECT 1.0*MyInt1/MyInt2

或者:

SELECT (1.0*MyInt1)/MyInt2

没有必要对它们都施法。除法的结果数据类型总是具有较高的数据类型优先级。因此,解决办法必须是:

SELECT CAST(1 AS float) / 3

SELECT 1 / CAST(3 AS float)

我明白,在MySQL中不允许CASTing到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转换为以下类型:二进制,char, date, datetime, decimal, json, nchar, signed, time,无符号

使用这个

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

在这个sql语句中,首先转换为浮点数或乘以1.00。这将是一个浮点数。这里我考虑小数点后2位。你可以选择你需要的。

如果你来这里(就像我一样)找到整型值的解决方案,下面是答案:

CAST(9/2 AS UNSIGNED)

返回5

我很惊讶地看到select 0.7/0.9在Teradata中返回0.8,因为它们已经是浮点数/十进制数!我必须执行cast(0.7 as float)来获得我所追求的输出。

当使用字面量时,最好的方法是“tell”;SQL

如果你想要一个十进制的结果,添加小数点".0"对你们的数字:

SELECT 1.0 / 3.0
结果
0.333333
人力资源/ > < / div > <

如果你想要一个浮点(真实)结果,添加"e0"对你们的数字:

SELECT 1e0 / 3e0
结果
0.333333333333333