如何在SQL Server查询中将整数转换为十进制?

时间:2012-04-22 19:53:49

标签: sql sql-server type-conversion

height在我的SQL Server表中是整数类型。我想进行除法,并在查询中将结果作为十进制:

Select (height/10) as HeightDecimal

如何投射以使HeightDecimal不再是整数?感谢。

5 个答案:

答案 0 :(得分:63)

SELECT height/10.0 AS HeightDecimal FROM dbo.whatever;

如果你想要一个特定的精度等级,那么这样说:

SELECT CONVERT(DECIMAL(16,4), height/10.0) AS HeightDecimal
  FROM dbo.whatever;

答案 1 :(得分:20)

SELECT CAST(height AS DECIMAL(18,0)) / 10

编辑:这是如何在幕后工作的?

结果类型与两个参数的类型相同,或者,如果它们不同,则由data type precedence table确定。因此,您可以将任一参数转换为非整数。

现在DECIMAL(18,0),或者你可以等同地只写DECIMAL,仍然是一种整数类型,因为0的默认比例意味着“小数点右边没有数字”点”。因此,在不同的情况下,它可以很好地用于舍入到整数 - 与我们想​​要完成的相反。

但是,DECIMAL对所有事情都有自己的规则。它们通常是非整数,但总是精确的数字。在我们的例子中,我们强制发生的DECIMAL除法的结果类型is determined specially为DECIMAL(29,11)。因此,除法的结果将舍入到11个位置,不考虑除以10,但是当除以3时舍入变得可观察。您可以通过操纵左手操作数的比例来控制舍入量。您还可以通过在整个表达式周围放置另一个ROUND或CAST操作来更多但不能更少。

相同的机制支配了接受的答案中更简单,更好的解决方案:

  SELECT height / 10.0

在这种情况下,除数的类型为DECIMAL(3,1),结果的类型为DECIMAL(17,6)。尝试除以3并观察四舍五入的差异。

如果你只是讨厌所有关于精度和标度的讨论,并且只是希望SQL服务器从某个角度开始在旧的双精度浮点算术中执行所有计算,你也可以强制执行:

SELECT height / CAST(10 AS FLOAT(53))

或等效地

SELECT height / CAST (10 AS FLOAT)

答案 2 :(得分:4)

您可以将高度转换为小数:

select cast(@height as decimal(10, 5))/10 as heightdecimal

或者在您要除以的值中放置一个小数点:

declare @height int
set @height = 1023

select @height/10.0 as heightdecimal

请参阅sqlfiddle示例

答案 3 :(得分:2)

select cast (height as decimal)/10 as HeightDecimal

答案 4 :(得分:0)

declare @xx int 
set     @xx = 3 
select @xx      
select @xx * 2  -- yields another integer  
select @xx/1    -- same
select @xx/1.0  --yields 6 decimal places 
select @xx/1.00 --       6 
select @xx * 1.0  --     1 decimal place - victory
select @xx * 1.00 --     2         places - hooray 

另外_将一个int插入到temp_table中,就像十进制(10,3)一样_可以正常工作。