我试图围绕一些领域。当我有59天的时候,我想把它改成60天。
问题在于,当我使用此代码时,59将更改为30,因为它是1的圆形。
select round(1.9666,0)*30, round(59/30,0)*3'
该查询的结果是第一个字段为60,第二个字段为30。问题在于,当我尝试过时:
select 59/30
结果为1,我需要的答案是1.9666 ......
我该怎么做?
答案 0 :(得分:1)
因为您要除以的数字是INT
(左侧的数据类型无关紧要),SQL Server将返回INT
作为答案。
如果您想要一个带小数位的数字作为结果,则需要除以一。
不要转换为FLOAT
,因为答案可能不是您想要的(浮动通常不准确并且是'approximations'):
SELECT 59 / CAST(30 AS FLOAT) -- = 1.96666666666667
CAST
分组的右侧是DECIMAL
:
SELECT 59 / CAST(30 AS DECIMAL(10, 2)) -- = 1.96666
答案 1 :(得分:0)
SELECT cast(59 AS FLOAT) / cast(30 AS FLOAT)
因为原始数字是整数,所以SQL假定你想要一个整数输出。
为确保您获得小数位数,您需要先将数据类型从整数int
更改为浮点float
。
这是CAST命令的作用。
编辑:评论者建议你转而使用DECIMAL。原理是一样的,但你需要提供更多的论据。要转换为小数,请使用以下内容:
cast(59 as DECIMAL(18, 3))
第一个参数(18)是您想要允许的小数总数。第二个参数(3)是小数点后的数字。
它更准确的建议是正确的 - 因为您将看到您是否一个接一个地运行此答案中的SELECT语句。但在这种特殊情况下,它只会产生微小的差异。