我想使用 T-SQL 和 Microsoft SQL Server,在两个整数相除时指定小数位数,例如:
select 1/3
目前返回0
。我希望它返回0,33
。
类似这样:
select round(1/3, -2)
但那样做并不起作用。我该如何达到所需的结果?
我想使用 T-SQL 和 Microsoft SQL Server,在两个整数相除时指定小数位数,例如:
select 1/3
目前返回0
。我希望它返回0,33
。
类似这样:
select round(1/3, -2)
但那样做并不起作用。我该如何达到所需的结果?
如果您需要使用现有的整数字段或参数,则可以首先将它们转换为浮点数,stb和xiowl提供的建议对于寻找常量是可以的:
SELECT CAST(1 AS float) / CAST(3 AS float)
或者SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
decimal
。 - itsazzad因为SQL Server执行整数除法。请尝试以下代码:
select 1 * 1.0 / 3
当你将整数作为参数传递时,这非常有用。
select x * 1.0 / y
不需要同时转换两个数据类型。在除法运算中,结果的数据类型始终是具有较高 数据类型优先级 的那个。因此解决方案应该是:
SELECT CAST(1 AS float) / 3
或者SELECT 1 / CAST(3 AS float)
select 1/3.0
这样做就可以了。
CAST
为FLOAT
是不允许的,尝试执行CAST(1 AS float)
会导致错误,如MySQL dev所述。(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、time和unsigned。
CAST
,但不允许将类型转换为FLOAT
。请改为转换为DECIMAL
。例如,请参考https://dev59.com/sms05IYBdhLWcg3wPPaB。 - markusk看起来这个技巧在SQL Server中也能用,并且更简短(基于之前的答案)。
SELECT 1.0*MyInt1/MyInt2
或者:
SELECT (1.0*MyInt1)/MyInt2
SELECT 100.0 * @Elapsed / @Total
- EliShererselect cast((1*1.00)/3 AS DECIMAL(16,2)) as Result
在这个SQL语句中,首先将数字转换为浮点数或者乘以1.00,输出结果将是一个浮点数。在此例子中,我考虑了两位小数。您可以根据需要自行选择。
如果你来到这里(就像我一样)是为了寻找整数值的解决方案,那么这里就是答案:
CAST(9/2 AS UNSIGNED)
返回5
在Teradata中,我很惊讶地看到select 0.7/0.9
返回了0.8
,因为它们已经是浮点数/十进制数!我不得不使用cast(0.7 as float)
来获得我想要的输出。
在使用字面量时,最好的方法是“告诉”SQL你指的是哪种类型。
如果你想要一个十进制结果,在数字后面加上小数点“.0”:
SELECT 1.0 / 3.0
Result |
---|
0.333333 |
SELECT 1e0 / 3e0
Result |
---|
0.333333333333333 |