Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2012, 01:54   #1
Jora_Kornev
Пользователь
 
Аватар для Jora_Kornev
 
Регистрация: 06.01.2009
Сообщений: 72
По умолчанию Сумма времени запросом SQL

Подскажите как SQL-запросом получить сумму времени из таблицы.
Использую подключение к MS SQL Server.
Тип поля gaming_time - time

Результат запроса в Management Studio (для теста запроса)
Код:
SELECT SUM([gaming_time]) FROM Table1
выдает такую ошибку:
Сообщение 8117, уровень 16, состояние 1, строка 1
Тип данных операнда time недопустим для оператора sum.
ася: тристадевяносто 068 ноль восемь шесть
Jora_Kornev вне форума Ответить с цитированием
Старый 03.03.2012, 12:05   #2
Jora_Kornev
Пользователь
 
Аватар для Jora_Kornev
 
Регистрация: 06.01.2009
Сообщений: 72
По умолчанию

Вобщем проблему решил. Пришлось поменять тип поля на datetime и переделать запрос:
Код:
SELECT LTRIM(STR(S/3600))+':'+RIGHT('0'+CAST(S%3600/60 AS CHAR(2)),2)+':'+RIGHT('0'+CAST(S%60 AS CHAR(2)),2)
FROM (SELECT SUM(DATEDIFF(SECOND, CONVERT(CHAR(8),gaming_time,112),gaming_time)) FROM Table1) T(S);
ася: тристадевяносто 068 ноль восемь шесть
Jora_Kornev вне форума Ответить с цитированием
Старый 03.04.2013, 11:25   #3
Jora_Kornev
Пользователь
 
Аватар для Jora_Kornev
 
Регистрация: 06.01.2009
Сообщений: 72
По умолчанию

Недавно переделал запрос, теперь он работает для полей типа time
Код:
SELECT LTRIM(STR(S/3600))+':'+RIGHT('0'+CAST(S%3600/60 AS VARCHAR(2)), 2)+':'+RIGHT('0'+CAST(S%60 AS VARCHAR(2)), 2)
FROM (SELECT SUM((DATEPART(hh, gaming_time)*3600)+(DATEPART(mi, gaming_time)*60) + (DATEPART(ss, gaming_time)))
FROM Table1 where gaming_time is not null and date = '03.04.2013')  T(S);
ася: тристадевяносто 068 ноль восемь шесть
Jora_Kornev вне форума Ответить с цитированием
Старый 03.04.2013, 11:55   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не понятен такой подход к хранению интервала времени. А если в каком-то интервале больше 24 часов? Тогда приехали. Не лучше ли хранить дату-время начала и дату-время конца события и обрабатывать разницу?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с запросом SQL lyle_200490 SQL, базы данных 2 20.11.2010 08:09
Работа с запросом сумма MSD Помощь студентам 3 03.06.2010 15:03
Проблема с SQL-запросом stscolt БД в Delphi 5 19.02.2010 16:47
Проблема с SQL запросом Bilargo БД в Delphi 4 27.11.2009 19:10
Помогите с SQL-запросом FleshDro SQL, базы данных 15 28.07.2009 13:32