سؤال

ولدي حقل الوقت في قاعدة بيانات MSSQL 2008 التي أريد أن أفعل شيئا لتأثير:

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

وأين AmountOfTime حقل MSSQL الوقت. يبدو المبلغ للعمل فقط على الكسور العشرية، كيف يمكنني إضافة هذه الأعمدة؟

هل كانت مفيدة؟

المحلول

وربما كنت ترغب في تحويل فترات لفترات - إذا لزم الأمر، وذلك بطرح وقت البدء من نهاية الوقت. لاحظ أن نوع الوقت يمثل لحظة، وليس المدة. في SQL القياسية، وتريد INTERVAL ساعة إلى الثانية. لست متأكدا ما إذا كانت مايكروسوفت تدعم ذلك - هناك DBMS الرئيسية الأخرى التي لا. إذا كنت عالقة مع الوقت، يجب أن تكون قادرا على طرح الوقت '00: 00: 00 'من القيم والحصول على شيء عملي (وهذا من شأنه أن يكون الفاصل الزمني)

.

وميزة واحدة معينة من فترات هو أنه يمكنك إضافة حقا لهم عبر SUM.

لمن التفاصيل، يمكنك اليدوي باش في MSDN (أو عن طريق جوجل)، وكذلك أستطيع.

نصائح أخرى

إذا لم SQL بناء دعم هذا، لا يمكنك ... لماذا لا تجعل حقل خاص والتي لديها تمثيل رقمي من الوقت، وبعد ذلك يمكنك إضافتها معا باستخدام 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