powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как получить время длиннее суток?
19 сообщений из 19, страница 1 из 1
Как получить время длиннее суток?
    #38988369
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
select dateadd(hour, 25, cast('00:00:00' as time)) from rdb$database


дает 01:00:00.000 вместо ожидаемого (мною) 25:00:00.000

Оставляя за скобками правильность моих ожиданий - как можно получить длительность больше суток в часах/минутах/секундах? Кроме как
Код: sql
1.
select datediff(second, current_timestamp, dateadd(hour, 25, current_timestamp)) from rdb$database


с последующими преобразованиями?
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988372
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB не имеет типа "интервал", так что единственное что ты можешь получить это целое или
дробное. И так да, с последующим ручным преобразованием.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988373
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никак.
тип TIME для этого не предназначен.
может в тройке есть INTERVAL?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988374
dennis-r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline,

Время в БД - это не длительность, это момент.
Длительность должна считаться в требуемых единицах, сиречь просто числом, и преобразовываться к нужному виду при отображении.
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988392
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

нету
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988394
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, всем спасибо.

Мимопроходящийможет в тройке есть INTERVAL?
Присоединяюсь к вопросу. Поиском в трекере не нашел.
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988398
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисМимопроходящий,
нету
Есть смысл писать трекеру о такой возможности? Или оно никому не надо кроме меня?
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988402
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineПрисоединяюсь к вопросу
Нету. Как и смысла в нём. Разве что в четвёрке Адриано запилит чисто "чтоб было как у
большого брата" если ему намекнуть.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988403
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline,

Мне почему-то кажется что оно там есть. Можешь написать. Правда приоритет будет ниже плинтуса.
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988446
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovmiwaonlineПрисоединяюсь к вопросу
Нету. Как и смысла в нём.
Даже не знаю... Что, с интервалами (длительностью более суток) в базе данных никто не работет?

Симонов ДенисМне почему-то кажется что оно там есть. Можешь написать. Правда приоритет будет ниже плинтуса
Ну не знаю, искал и по interval и по time - вроде не нашел.

Просто так, чтобы было - писать смысла не вижу. Я-то свою задачу решу, конечно; интересует больше "академическая" сторона вопроса.
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988453
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineинтервалами (длительностью более суток) в базе данных никто не работет?

Повторяю ещё раз, медленно: интервал это всего лишь число. Выделять под него отдельный тип
не имеет смысла.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988467
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovmiwaonlineинтервалами (длительностью более суток) в базе данных никто не работет?

Повторяю ещё раз, медленно: интервал это всего лишь число. Выделять под него отдельный тип не имеет смысла.
Согласен, только переспрошу - число чего? Секунд? Минут? Часов? Крокодилов? Всего вместе через двоеточие?
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988475
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineчисло чего? Секунд? Минут? Часов? Крокодилов? Всего вместе через
двоеточие?
При вычитании двух TIMESTAMP или DATE - дней.
При вычитании двух TIME - секунд.
ЕМНИП.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988886
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline,

Месяц назад пилил эту тему. В конторе ведут ежедневную выработку сотрудников в часах, затем необходимо подсчитать, сколько выработано часов в месяц, от этого подсчитать процент от плана и начислить зарплату.
Сначала подумал, что сделаю всё на "раз-два", но обломился.
Пришлось сделать так:
1. Создал поле, куда оператор вводит дневную выработку NUMERIC(15,2), например, 4,45 (4 часа 45 минут)
2. Создал поле SMALLINT, куда триггером вносится расчётное значение дневной выработки уже в минутах . (285 минут для примера)


на клиенте показывать агрегацию по столбцам и строкам вида, напр. 256:45 (256 часов 45 минут) приходится вычислением из соответствующих минут.
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988896
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11Сначала подумал, что сделаю всё на "раз-два", но обломился.
Пришлось сделать так:
1. Создал поле, куда оператор вводит дневную выработку NUMERIC(15,2), например, 4,45 (4 часа 45 минут)
2. Создал поле SMALLINT, куда триггером вносится расчётное значение дневной выработки уже в минутах . (285 минут для примера)


на клиенте показывать агрегацию по столбцам и строкам вида, напр. 256:45 (256 часов 45 минут) приходится вычислением из соответствующих минут.

Кхм...
Код: sql
1.
2.
3.
4.
5.
6.
select
  (total_time_rest/3600) || ':' ||
  iif(((total_time_rest - (total_time_rest/3600)*3600) / 60 > 9),
      ((total_time_rest - (total_time_rest/3600)*3600) / 60),
      '0' || ((total_time_rest - (total_time_rest/3600)*3600) / 60) )
  from time_spending


В поле total_time_rest - время в секундах.
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988899
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline
Кхм...
Код: sql
1.
2.
3.
4.
5.
6.
select
  (total_time_rest/3600) || ':' ||
  iif(((total_time_rest - (total_time_rest/3600)*3600) / 60 > 9),
      ((total_time_rest - (total_time_rest/3600)*3600) / 60),
      '0' || ((total_time_rest - (total_time_rest/3600)*3600) / 60) )
  from time_spending


В поле total_time_rest - время в секундах.

Это хорошо для урока информатики, но с сервера тянуть расчёт строки для каждого значения, наверное не правильно.

А если уж и тянуть, то как-то чуть поизящнее:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or alter procedure MINUTE_TO_TIME (
    MINUTE_ integer)
returns (
    STR_TIME varchar(15))
as
begin
  str_time=floor(:minute_/60)||':'||lpad(:minute_-floor(:minute_/60)*60,2,'0');
  suspend;
end



P.S. floor тут конечно, лишний, но для аккуратности я его оставил.
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988908
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11,

Да, об lpad я как-то забыл :(

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

Оборачивать такое в процедуру - тут уже на любителя. Лично мне не нравится левый (в смисле лишний) джойн, кому-то может не нравиться длинная строка в запросе.
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988927
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline,

у моих клиентов куб, поэтому они вытягивают всё, а это порядка 100 000 записей за год. Так что тянуть расчёт строк с сервера не вариант. Вот когда они на клиенте куб построят на основе минут, тогда уже и делается обработка. Всё достаточно быстро получается. Выглядит ~ так:
...
Рейтинг: 0 / 0
Как получить время длиннее суток?
    #38988949
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zeon11у моих клиентов куб, поэтому они вытягивают всё, а это порядка 100 000 записей за год. Так что тянуть расчёт строк с сервера не вариант.
Ну, здесь сложно что-то возразить. У меня даже сотни записей не будет в результирующем НД, так что варант "для урока информатики" мне пойдет. Разве что с lpad вместо iif ;)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как получить время длиннее суток?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]