Мое предположение: ваши DateTimes отслеживают истекшее время. Например, ваше первое значение «1/1/1900 12:20:45» означает, что прошло 12 часов, 20 минут и 45 секунд во время (независимо). Учитывая это, вы хотите суммировать все эти прошедшие времена, создавая «общее истекшее время».
Вот один из способов сделать это. (Могут быть и другие - там всегда, кажется, лучший способ реализовать математику времени.) Я запрашиваю только один столбец, чтобы сделать пример более понятным и быть правильно параноидальным. Кроме того, я предполагаю, что : часть (а) абсолютно неактуальна и (b) может быть установлена на что угодно. [И, конечно, если вы используете SQL 2008, вы хотите установить столбец с типом данных времени.] Последний столбец [5] - тот, который вы хотите; другие объясняют, как я туда попал.
select
MyColumn -- [1]
,dateadd(dd, -datediff(dd, 0, MyColumn), MyColumn) -- [2]
,datediff(ss, 0, dateadd(dd, -datediff(dd, 0, MyColumn), MyColumn)) -- [3]
from MyTable
select
sum(datediff(ss, 0, dateadd(dd, -datediff(dd, 0, MyColumn), MyColumn))) -- [4]
,dateadd(ss, sum(datediff(ss, 0, dateadd(dd, -datediff(dd, 0, MyColumn), MyColumn))), 0) -- [5]
from MyTable
[1] показывает начальное значение для каждой строки.
[2] конвертирует дату каждого столбца в «1 января 1900 года». Если вы мертвы, убедитесь, что ваши даты будут всегда быть одинаковыми, вам не нужно учитывать это.
[3] Это вычисляет количество секунд, прошедших между полуночью и записанным временем.
[4] Это сумма секунд.
[5] Это добавляет истекшее время (в секундах) к «1 января 1900 года».
Оттуда используйте любую стандартную технологию форматирования, которую вы используете для отображения результатов в течение прошедшего времени (не забудьте указать даты, так как прошедшее время может превышать 24 часа). Этот метод будет точным для любой единицы времени (здесь, как вы хотели, я использовал секунды), но обратите внимание, что если общее количество единиц прошедшего времени превышает (2^31 - 1), как и для миллисекунд, вы может потребоваться бросить на bigints.
Хм, просто подумал: что, если одно истекшее время больше 24 часов? В этом случае дата вашего дата и времени значительна и должна представлять «дату начала». Хуже того, мы не можем предположить, что самая ранняя дата из пула образцов - это базовая дата, так как все ваши прошедшие времена могут составлять 24 часа и более. Для этого вам нужно каким-то образом определить «базовую дату» для расчета. Поскольку в вашем вопросе о том, какова может быть базовая дата, нет никаких указаний, я в качестве окончательного предположения предполагаю, что это не проблема, - что все ваши прошедшие времена будут находиться в пределах 24 часов.
Что означает «сумма», когда вы добавляете две даты? Какие результаты можно ожидать от добавления столбцов 1 и 2 в вашем примере? – Welbog
Разве вы не спросили об этом? –
А, нашел (ссылка видна только для пользователей 10K): http://stackoverflow.com/questions/1497856/how-to-get-a-sum-of-varchar-value/1497937#1497937 Почему вы удалили Старый? –