LaB*_*cca 159 sql-server rounding division sql-server-2008
当我在2个整数之间进行除法时,我想指定小数位数,如:
select 1/3
Run Code Online (Sandbox Code Playgroud)
目前返回0.我希望它能回来0,33.
就像是:
select round(1/3, -2)
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我怎样才能达到预期的效果?
Ric*_*ard 250
如果你正在寻找常数,那么来自stb和xiowl的建议很好.如果需要使用整数的现有字段或参数,可以先将它们转换为浮点数:
SELECT CAST(1 AS float) / CAST(3 AS float)
Run Code Online (Sandbox Code Playgroud)
要么
SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
Run Code Online (Sandbox Code Playgroud)
xia*_*owl 64
因为SQL Server执行整数除法.试试这个:
select 1 * 1.0 / 3
Run Code Online (Sandbox Code Playgroud)
将整数作为参数传递时,这很有用.
select x * 1.0 / y
Run Code Online (Sandbox Code Playgroud)
M.S*_*.S. 39
没有必要同时施放它们.除法的结果数据类型始终是具有更高数据类型优先级的数据类型.因此解决方案必须是:
SELECT CAST(1 AS float) / 3
Run Code Online (Sandbox Code Playgroud)
要么
SELECT 1 / CAST(3 AS float)
Run Code Online (Sandbox Code Playgroud)
Sup*_*hin 12
可能有点晚了,但要意识到CASTING以FLOAT未在MySQL允许的,当你试图将引发错误CAST(1 AS float)的在规定的MySQL的开发.
解决方法很简单.做就是了
(1 + 0.0)
Run Code Online (Sandbox Code Playgroud)
然后ROUND用来实现特定的小数位数
ROUND((1+0.0)/(2+0.0), 3)
Run Code Online (Sandbox Code Playgroud)
上面的SQL将1除以2并将float返回到3个小数位,就像它一样0.500.
可以CAST使用以下类型:binary,char,date,datetime,decimal,json,nchar,signed,time和unsigned.
看起来这个技巧在SQL Server中有效并且更短(基于以前的答案)
SELECT 1.0*MyInt1/MyInt2
Run Code Online (Sandbox Code Playgroud)
要么:
SELECT (1.0*MyInt1)/MyInt2
Run Code Online (Sandbox Code Playgroud)