1

我在 mssql 2008 数据库中有一个时间字段,我想做一些事情来达到以下效果:

Timespent = x.sum(x => x.AmountOfTime);

其中 AmountOfTime 是一个时间 MSSQL 字段。Sum 似乎只适用于小数,如何添加这些列?

4

4 回答 4

0

如果 SQL 构造不支持这一点,你就不能......为什么不创建一个具有时间数字表示的特殊字段,然后你可以使用 SQL 将它添加到一起。

于 2009-03-02T07:54:44.823 回答
0

您可能希望将周期转换为间隔 - 如有必要,通过从结束时间减去开始时间。请注意,TIME 类型表示瞬间,而不是持续时间。在标准 SQL 中,您需要 INTERVAL HOUR TO SECOND。我不确定微软是否支持——还有其他主要的 DBMS 不支持。如果你被 TIME 卡住了,你应该能够从值中减去 TIME '00:00:00' 并得到一些可行的东西(这将是一个 INTERVAL)。

间隔的一个特殊优势是您确实可以通过 SUM 将它们相加。

有关详细信息,您可以像我一样在 MSDN(或通过 Google)手动 bash。

于 2009-03-02T08:03:37.423 回答
0
public static class Extentions
{
    public static TimeSpan Sum<T>(this IEnumerable<T> items, Func<T, TimeSpan> selector)
    {
        var summ = TimeSpan.Zero;
        foreach(T item in items)
        {
            summ += selector(item);
        }
        return summ;
    }
}

var timespent = foo.Sum(f => f.finishdatetime - f.startdatetime);
于 2009-08-13T13:15:20.670 回答
-1

我使用以下方法解决了这个问题,因为你的桌子上有一个开始和结束的日期时间:

public TimeSpan AmountOfTime(IQueryable<Something> iq)
{
    TimeSpan ts = TimeSpan.Zero;
    foreach (Something a in iq.ToList())
        ts += (a.finishdatetime - a.startdatetime);
    return ts
}

然后您可以使用它来获取总小时数:

double foo = AmountOfTime(datacontext.Where(conditions)).TotalHours;
于 2009-05-15T23:10:09.470 回答