【发布时间】:2013-03-02 19:11:41
【问题描述】:
为了回答这里的另一个问题,我创建了以下数据结构和行:
create table [resource] (Name varchar(16),date datetime, project varchar(16),hours int)
INSERT INTO resource
values ('Andy Sandy', '2013-03-02', 'Enhancements',40)
INSERT INTO resource
values('Fred Jones', '2013-10-02', 'Enhancements',40)
我已经执行了以下查询:
select
case when sum(hours) > 0 Then
CAST(SUM(hours) as DECIMAL(5,2))/40
else 0 end as [hours],
[DATE]
from resource group by date
结果如下所示:
Hours Date
1.000000 2013-03-02 00:00:00.000
1.750000 2013-10-02 00:00:00.000
当我将小时数转换为小数时,我指定了 5 的精度和 2 的刻度。我不明白为什么这个数字是这样的。如果我没有指定精度和比例,那么结果是一样的。这是为什么呢?
【问题讨论】:
-
我用你提供的数据得到这个:小时 DATE -------------------------------- ------- ----------- 1.000000 2013-03-02 00:00:00.000 1.000000 2013-10-02 00:00 :00.000
-
除法的结果是
numeric(9,6)。将 40 视为numeric(2,0),然后将精度和比例插入the formulas in BOL -
$&%^% 愚蠢的规则意味着我不能通过发布不适当的答案来合理地格式化这个而不失去代表。
-
以下语句解决了这个问题。我正在考虑删除这个问题:CAST(CAST(SUM(hours) as DECIMAL(5,2))/40 AS Decimal(5,2))
-
@Pieter Geerkens,我不明白你的担忧。请在评论中发表。
标签: sql sql-server