расчет времени

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
urban
Сообщения: 4
Зарегистрирован: 16 май 2006, 20:00

расчет времени

Сообщение urban » 21 июл 2006, 14:23

Подскажите пожалуйста, у меня есть поля типа TIME - intime(11:35) и outtime(12:00), как мне сделать расчет времени,допустим res=outtime-intime=00:35
Заранее благодарен.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 21 июл 2006, 14:38

Разница времен не является временем. Но если сильно припекло, дели на 10000 и получишь секунды. Потом еще на 60 для минут.

urban
Сообщения: 4
Зарегистрирован: 16 май 2006, 20:00

расчет времени

Сообщение urban » 21 июл 2006, 15:20

Dimitry Sibiryakov писал(а):Разница времен не является временем. Но если сильно припекло, дели на 10000 и получишь секунды. Потом еще на 60 для минут.
еще вопрос такого плана, допустим нужно сложить 23:00+22:00=1дн 21:00, а при таком вот запросе

cast('23:00' as time)+(cast('22:00' as time)-cast('00:00' as time))

в результате я получаю только время=21:00, куда деваются дни?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 21 июл 2006, 15:23

сложение времени с интервалом дает время. Про даты озаботься сам

urban
Сообщения: 4
Зарегистрирован: 16 май 2006, 20:00

расчет времени

Сообщение urban » 21 июл 2006, 15:54

конечно спасибо, но буду рад если кто-то может быть всетаки сталкивался с такой проблемой и даст мне подсказку, как учесть дни.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Re: расчет времени

Сообщение stix-s » 21 июл 2006, 16:43

urban писал(а):конечно спасибо, но буду рад если кто-то может быть всетаки сталкивался с такой проблемой и даст мне подсказку, как учесть дни.
для начала рекомендую сюда:
http://community.borland.com/article/0, ... 86,00.html
а вообще придется ньюансы в клиенте решать, не трогая SQL (ИМХО)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 21 июл 2006, 17:07

даст мне подсказку, как учесть дни.
никак. длительность надо хранить в integer. в секундах, минутах, в чем угодно. Тогда можно и сумму по этим столбцам считать, и т.п. А TIME - это "метки" времени, а не интервалы.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 21 июл 2006, 17:08

для начала рекомендую сюда:
http://community.borland.com/article/0, ... 86,00.html
кстати, статья эта хреновая. Т.е. она хорошая в том смысле, что показывает виды операций над датой и временем, но при таких вычислениях идет сильная погрешность. например, вот это:

Код: Выделить всё

select cast('0:00' as time)+(cast('7/4/02 21:00' as timestamp)-current_timestamp)*24*60*60 from rdb$database
врет на несколько секунд (или больше).

когда откроется курс по типам данных
http://course.ibase.ru/course/category.php?id=3
там будет материал, как считать правильно, включая этот случай. Однако хранение интервалов все равно надо делать в целочисленных типах.

Ответить