使用T-SQL和Microsoft SQL Server,我想指定十进制数字的数量,当我做2个整数之间的除法,如:
select 1/3
它当前返回0。我想让它返回(0,33)
喜欢的东西:
select round(1/3, -2)
但这行不通。我怎样才能达到预期的结果?
使用T-SQL和Microsoft SQL Server,我想指定十进制数字的数量,当我做2个整数之间的除法,如:
select 1/3
它当前返回0。我想让它返回(0,33)
喜欢的东西:
select round(1/3, -2)
但这行不通。我怎样才能达到预期的结果?
当前回答
看起来这个技巧在SQL Server中有效,而且更短(基于之前的回答)
SELECT 1.0*MyInt1/MyInt2
Or:
SELECT (1.0*MyInt1)/MyInt2
其他回答
看起来这个技巧在SQL Server中有效,而且更短(基于之前的回答)
SELECT 1.0*MyInt1/MyInt2
Or:
SELECT (1.0*MyInt1)/MyInt2
因为SQL Server执行整数除法。试试这个:
select 1 * 1.0 / 3
当您将整数作为参数传递时,这很有帮助。
select x * 1.0 / y
如果你来这里(就像我一样)寻找整数值的解决方案,以下是答案:
CAST(9/2 AS UNSIGNED)
返回5
如果您正在寻找一个常数,来自stb和xiowl的建议是很好的。如果你需要使用现有的整数字段或参数,你可以先将它们转换为浮点数:
SELECT CAST(1 AS float) / CAST(3 AS float)
or
SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
我明白,在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。