当我在2个整数之间进行除法时,我想指定小数位数,如:
select 1/3
目前返回0
。我希望它返回0,33
。
类似的东西:
select round(1/3, -2)
但这不起作用。我怎样才能达到预期的效果?
答案 0 :(得分:230)
如果您正在寻找常数,那么来自stb和xiowl的建议很好。如果需要使用整数的现有字段或参数,可以先将它们转换为浮点数:
SELECT CAST(1 AS float) / CAST(3 AS float)
或
SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
答案 1 :(得分:58)
因为SQL Server执行整数除法。试试这个:
select 1 * 1.0 / 3
当您将整数作为参数传递时,这很有用。
select x * 1.0 / y
答案 2 :(得分:37)
没有必要同时施放它们。除法的结果数据类型始终是具有较高data type precedence的数据类型。因此解决方案必须是:
SELECT CAST(1 AS float) / 3
或
SELECT 1 / CAST(3 AS float)
答案 3 :(得分:22)
使用
select 1/3.0
这将完成这项工作。
答案 4 :(得分:10)
可能会迟到一点,但要意识到MySQL中不允许CAST
FLOAT
,并且当您尝试CAST(1 AS float)
MySQL dev时会出现错误}。
对此的解决方法很简单。只是做
(1 + 0.0)
然后使用ROUND
来获得特定数量的小数位,例如
ROUND((1+0.0)/(2+0.0), 3)
上面的SQL将1除以2并将float返回到3个小数位,就像0.500
一样。
可以CAST
以下类型:二进制,字符,日期,日期时间,十进制,json,nchar,签名,时间,和无符号。
答案 5 :(得分:7)
看起来这个技巧在SQL Server中起作用并且更短(基于以前的答案)
SELECT 1.0*MyInt1/MyInt2
或者:
SELECT (1.0*MyInt1)/MyInt2
答案 6 :(得分:3)
#define IDIOM UI_USER_INTERFACE_IDIOM()
#define IPAD UIUserInterfaceIdiomPad
if ( IDIOM == IPAD ) {
/* do something specifically for iPad. */
} else {
/* do something specifically for iPhone or iPod touch. */
}
这里的sql首先转换为float或乘以1.00。哪个输出将是一个浮点数。这里我考虑2位小数。你可以选择你需要的东西。
答案 7 :(得分:2)
如果你来到这里(就像我一样)找到整数值的解决方案,这就是答案:
CAST(9/2 AS UNSIGNED)
返回5