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

select 1/3

它当前返回0。我想让它返回(0,33)

喜欢的东西:

select round(1/3, -2)

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


当前回答

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

SELECT CAST(1 AS float) / 3

or

SELECT 1 / CAST(3 AS float)

其他回答

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

select 1 * 1.0 / 3

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

select x * 1.0 / y

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

SELECT 1.0*MyInt1/MyInt2

Or:

SELECT (1.0*MyInt1)/MyInt2

我明白,在MySQL中不允许将其转换为FLOAT,并且当您尝试在MySQL开发中所述的CAST(1 AS FLOAT)时会引发错误。

解决这个问题的方法很简单。只做

(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和unsigned。

当使用文字时,最好的方法是“告诉”SQL 你指的是哪一种?

如果你想要一个十进制的结果,添加小数点”。0"到你的数字:

SELECT 1.0 / 3.0
Result
0.333333

如果你想要一个浮点(实)结果,在你的数字后面加上"e0":

SELECT 1e0 / 3e0
Result
0.333333333333333

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

SELECT CAST(1 AS float) / 3

or

SELECT 1 / CAST(3 AS float)