为什么下面的select语句返回两个不同的值?t-sql十进制赋值更改值
declare @tempDec decimal
set @tempDec = 1.0/(1.0 + 1.0)
select @tempDec, 1.0/(1.0 + 1.0)
为什么下面的select语句返回两个不同的值?t-sql十进制赋值更改值
declare @tempDec decimal
set @tempDec = 1.0/(1.0 + 1.0)
select @tempDec, 1.0/(1.0 + 1.0)
这很好像1.0的文字,但如果你拉从表列中的数据,你需要转换/转换你的公式首先评估号:
convert(decimal, [col1])/([col2] + [col3])
- 或 -
convert(decimal(15, 2), [col1])/([col2] + [col3])
我发现从同事发现,就像我发布这个。
您需要指定默认的精度和比例。
这适用于这种情况: 声明@tempDec十进制(3,2)
从MSDN:
十进制[(对[,S])]和数字[(对[,s]的)] 固定精度和刻度编号。当使用最大精度时,有效值从 - 10^38 +1到10^38 - 1。小数的SQL-92同义词是dec和dec(p,s)。数字在功能上等同于小数。
p(precision) 可以存储的最大小数位总数,小数点的左边和右边都可以存储。精度必须是从1到38的最大精度的值。默认精度为18.
s(比例) 可存储在小数点右侧的最大小数位数。比例必须是从0到p的值。只有在指定了精度的情况下才能指定比例。默认比例是0;因此,0 < = s < = p。根据精度,最大存储大小会有所不同。
也就是说,局部变量中的零刻度将删除存储点后的数据 – gbn 2008-11-14 19:13:54