繁体   English   中英

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

[英]How to convert integer to decimal in SQL Server query?

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

Select (height/10) as HeightDecimal

如何进行转换以使HeightDecimal不再是整数? 谢谢。

SELECT height/10.0 AS HeightDecimal FROM dbo.whatever;

如果你想要一个特定的精度标度,那么说:

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

编辑:这是如何在引擎盖下工作的?

结果类型与两个参数的类型相同,或者,如果它们不同,则由数据类型优先级表决定 因此,您可以将任一参数转换为非整型。

现在DECIMAL(18,0) ,或者您可以等效地只写DECIMAL ,仍然是一种整数类型,因为默认比例0表示“小数点右侧没有数字”。 因此,对它的强制转换可能在不同情况下适用于四舍五入到整数 - 与我们试图完成的相反。

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

在接受的答案中,相同的力学控制着更简单和更好的解决方案:

  SELECT height / 10.0

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

如果您只是讨厌所有这些关于精度和比例的讨论,并且只是希望 SQL Server 从某个时候开始以良好的旧双精度浮点算术执行所有计算,您也可以强制这样做:

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

或等效地只是

SELECT height / CAST (10 AS FLOAT)

您可以将 Height 转换为小数:

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

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

declare @height int
set @height = 1023

select @height/10.0 as heightdecimal

参见sqlfiddle示例

select cast (height as decimal)/10 as HeightDecimal
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 中,例如 decimal(10,3) _ 可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM