Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день, у меня проблема с вычислением продолжительности некого события. В БД фиксируется и врямя начала и окончания, также дата начала и окончания и даже датавремя начала и окончания. Но когда событие началось допустим сегодня в 23-50-00, а закончилось завтра в 23-44-00 то результат будет неверным...Помогите написать запрос.
Примерный вид БД в прикрепленном файле.
Вычисление продолжительности необходимо производить по двум переменным типа ДатаВремя. (ДатаВремяОкончание-ДатаВремяНачало=резалт). Но так не работает, АДОКвери в Делфи жалуется на непонятный тип данных, всячиские советы на других форумах ни к чему не привели. Может тут помогут.
Неактивен
Неактивен
Я так понимаю-юзайте ТИМЕДИФФ и будет счастье?
Если я правильно понял, то так не работает:
ADOQuery1.SQL.Text:='SELECT TIMEDIFF(oks7_sig.Datt_OFF,oks7_sig.Datt_ON) as "Ïðîäîëæèòåëüíîñòü", ';
пишет
Произошли ошибки во время выполнения многошаговой операции. Проверьте значения всех состояний...
Но пишет так, только в том случае, когда есть разница в ДНЯХ(тоесть в дате).
а вот так работает, но так считает только ДНИ(а мне нужны и дни и время):
ADOQuery1.SQL.Text:='SELECT DATEDIFF(oks7_sig.Datt_OFF,oks7_sig.Datt_ON) as "Ïðîäîëæèòåëüíîñòü", ';
Неактивен
Booldog написал:
ADOQuery1.SQL.Text:='SELECT TIMEDIFF(oks7_sig.Datt_OFF,oks7_sig.Datt_ON) as "Ïðîäîëæèòåëüíîñòü", ';
При корректном формате данных так должно работать.
Распечатайте само значение ADOQuery1.SQL.Text и запустите в консоли mysql. Если не работает то напишите значение тут.
Неактивен
я не умею пользоваться консолью MySQL...научите пользоваться или так:
Datt_ON __________| Dat_ON | Vremya_ON | Datt_OFF _______| Dat_OFF | Vremya_OFF
2013-02-01 00:20:40 / 2013-02-01/ 00:20:40 / 2013-02-02 00:20:42 / 2013-02-02 / 00:20:42
2013-02-01 00:20:40/ 2013-02-01/ 00:20:40 / 2013-02-02 00:20:22 / 2013-02-02 / 00:20:22
Вот тестовый проблемный случай.
Неактивен
я не умею пользоваться консолью MySQL...научите пользоваться или так:
Ну вы же где то проверяете ваши SQL запросы ? Какой нибудь SQL editor : phpMyAdmin, sqlYog , HeidiSQL, MySQL Workbench ?
Распечатайте саму ADOQuery1.SQL.Text, я думаю там битые данные.
В коде должен генерироваться такой запрос:
Неактивен
Использую HeidiSQL, я там обычно синтаксис посмотрю и сразу в делфи в АДОКвери и на компиляцию. Обычно культурно ругается-синтаксис и прочее понятные ошибки. Жутчайшее подозрения на несовпадение типов данных.
>>Распечатайте саму ADOQuery1.SQL.Text, я думаю там битые данные.
Простите, я Вас не понял. Вам привести весь запрос?
Неактивен
Притом приводить весь код запроса не вижу смысла, так как БЕЗ вот этих двух тестовых значений:
Datt_ON __________| Dat_ON | Vremya_ON | Datt_OFF _______| Dat_OFF | Vremya_OFF
2013-02-01 00:20:40 / 2013-02-01/ 00:20:40 / 2013-02-02 00:20:42 / 2013-02-02 / 00:20:42
2013-02-01 00:20:40/ 2013-02-01/ 00:20:40 / 2013-02-02 00:20:22 / 2013-02-02 / 00:20:22
ну и им подобных случаев всё работает прекрасно, правда выводит всё это дело в формате ТАЙМ (на сколько я вижу в делфи), то есть формат ответа 00:00:10 (10 секунд).
Можно попробовать так:
ADOQuery1.SQL.Text:='SELECT (oks7_sig.Datt_OFF-oks7_sig.Datt_ON) as "Ïðîäîëæèòåëüíîñòü", ';
но тогда ответ, это разница в формате INTEGER...например 1000002
дописываем после запроса
TDateField(ADOQuery1.FieldByName('Ïðîäîëæèòåëüíîñòü')).DisplayFormat:='00г-00мес-00дней/00часов-00мин-00сек;
и что получаем:
Datt_ON __________| Dat_ON | Vremya_ON | Datt_OFF _______| Dat_OFF | Vremya_OFF
2013-02-01 00:20:40 / 2013-02-01/ 00:20:40 / 2013-02-02 00:20:42 / 2013-02-02 / 00:20:42
ответ: 00г-00мес-01дней/00часов-00-мин-02-сек
Правильно! Но посмотрим второй случай:
Datt_ON __________| Dat_ON | Vremya_ON | Datt_OFF _______| Dat_OFF | Vremya_OFF
2013-02-01 00:20:40/ 2013-02-01/ 00:20:40 / 2013-02-02 00:20:22 / 2013-02-02 / 00:20:22
00г-00мес-00дней/99часов-99-мин-82-сек
Какие 99 часов, какие 99 минут, какие 82 секунды?? Все эти завышенные результаты надо минусовать толи на 40, толи на 60 уже непомню...Этот вариант мне тоже не подошел так как на MySQL резать результат посимвольно и анализировать я лично не умею А если перекладывать всё это на Делфи-ну это отдельный разговор
Вообщем какие еще мысли?
Отредактированно Booldog (18.03.2013 14:04:19)
Неактивен
Что всё настолько плохо что и тут помочь не в силах?
Неактивен
У вас проблема с манипуляциями дат в самом делфи.
Если передадите правильный запрос
Неактивен