質問

mssql 2008データベースに時間フィールドがあり、それを次の目的で実行したい

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

AmountOfTimeは、時間MSSQLフィールドです。合計は小数でのみ機能するようですが、これらの列を追加するにはどうすればよいですか?

役に立ちましたか?

解決

おそらく、期間を間隔に変換します-必要に応じて、終了時刻から開始時刻を減算します。 TIMEタイプは期間ではなくインスタントを表すことに注意してください。標準SQLでは、INTERVAL HOUR TO SECONDが必要です。 Microsoftがそれをサポートしているかどうかはわかりません-サポートしていない他の主要なDBMSがあります。 TIMEでスタックしている場合は、値からTIME '00:00:00 'を減算し、実行可能なもの(間隔)を取得できるはずです。

間隔の特定の利点の1つは、SUMを介して実際にそれらを加算できることです。

詳細については、MSDN(またはGoogle経由)で手動でbashを実行できます。

他のヒント

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