226

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

select 1/3

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

就像是:

select round(1/3, -2)

但这不起作用。我怎样才能达到预期的效果?

4

8 回答 8

352

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

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

或者

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
于 2012-07-30T12:05:44.533 回答
82

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

select 1 * 1.0 / 3

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

select x * 1.0 / y
于 2012-07-30T09:55:53.733 回答
54

没有必要同时施放它们。除法的结果数据类型始终是具有较高数据类型优先级的数据类型。因此,解决方案必须是:

SELECT CAST(1 AS float) / 3

或者

SELECT 1 / CAST(3 AS float)
于 2015-06-04T08:55:51.633 回答
31

采用

select 1/3.0

这将完成这项工作。

于 2012-07-30T09:55:21.117 回答
16

我知道MySQL 中不允许CASTing to ,并且当您尝试按照MySQL dev中的说明进行操作时会引发错误。FLOATCAST(1 AS float)

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

(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

于 2016-01-24T09:41:45.237 回答
9

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

SELECT 1.0*MyInt1/MyInt2

或者:

SELECT (1.0*MyInt1)/MyInt2
于 2015-02-11T15:32:27.793 回答
3

用这个

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

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

于 2017-02-13T04:22:44.470 回答
2

如果你(和我一样)来这里是为了找到整数值的解决方案,答案如下:

CAST(9/2 AS UNSIGNED)

返回 5

于 2017-03-08T10:33:21.340 回答