문제

MSSQL 2008 데이터베이스에 다음의 효과에 무언가를하고 싶은 시간 필드가 있습니다.

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

여기서 MSSQL 필드는 MSSQL 필드입니다. 합계는 소수의 경우에만 작동하는 것 같습니다.이 열을 어떻게 추가 할 수 있습니까?

도움이 되었습니까?

해결책

종료 시간부터 시작 시간을 빼서 필요한 경우 기간을 간격으로 변환하려고합니다. 시간 유형은 지속 시간이 아니라 즉각적인 것을 나타냅니다. 표준 SQL에서는 간격 시간에서 두 번째로 원합니다. Microsoft가 그것을 지원하는지 확실하지 않습니다. 그렇지 않은 다른 주요 DBM이 있습니다. 시간이 지남에 따라 붙어 있다면 값에서 '00 : 00 : 00 '을 빼고 실행 가능한 것을 얻을 수 있어야합니다 (간격이 될 것입니다).

간격의 한 가지 특별한 장점은 실제로 합을 통해 추가 할 수 있다는 것입니다.

자세한 내용은 MSDN (또는 Google을 통해)과 가능한 한 수동으로 강타 할 수 있습니다.

다른 팁

SQL Construct가 이것을 지원하지 않으면, 당신은 할 수 없습니다 ... 왜 당신은 시간을 숫자 표현을 가진 특수 필드를 만들지 않았고, 당신은 SQL을 사용하여 함께 추가 할 수 있습니다.

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);

테이블에서 시작 및 마무리 시간이 있다는 점을 감안할 때 다음 방법을 사용 하여이 문제를 해결했습니다.

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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top