一列height
是我的SQL Server表中的整数类型。我想要做的一个部门,有结果为十进制我的查询:如何将SQL Server查询中的整数转换为十进制数?
Select (height/10) as HeightDecimal
我怎么投,这样的HeightDecimal
不再是整数?谢谢。
一列height
是我的SQL Server表中的整数类型。我想要做的一个部门,有结果为十进制我的查询:如何将SQL Server查询中的整数转换为十进制数?
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
编辑:这是如何工作的引擎盖下?
结果类型与两个参数的类型相同,或者如果它们不同,则由data type precedence table确定。因此,您可以将任何参数转换为非整数的参数。
现在DECIMAL(18,0)
,或者你能等效写只是DECIMAL
,仍然是一种整数类型的,因为这0
默认的比例意味着“没有数字的小数点右边”。因此,在不同的情况下,对四舍五入到整数的工作可能很好 - 这与我们正在努力完成的事情相反。
但是,DECIMALs对于一切都有自己的规则。他们通常是非整数,但总是精确的数字。在我们的例子中,我们强制出现的DECIMAL分区的结果类型是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)
您可以施放高度为十进制:
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
'十进制(任何东西)'?为什么不指定? – 2012-04-22 20:10:13
你对分裂是正确的,但可能产生溢出问题,例如乘法。 '十进制(H)* 10'一般可能不等于'十进制(G * 10)',以为我已经长大习惯投下第一操作 – Dewfy 2012-04-22 20:25:49
之前我同意有明确的转换前的操作是更好的这样的方式。但我的观点是,如果你要说'小数',你应该说'小数(精度,比例)'。 – 2012-04-22 20:58:20
1为第一部分,但要注意,第二实施例的。这个'CONVERT'是在分裂之后应用的,并且不能给你多于已有的6位小数位数。 – 2012-12-17 12:30:13
完美解决方案!我想第一个表现更好!不是吗? – Diablo 2016-05-09 08:40:42
@Diablo那么,你可以测试它,但我怀疑你会发现任何区别。无论如何,如果您需要特定的精度/比例,请在您的应用程序层中进行格式化。 – 2016-05-09 14:33:16