Как преобразовать интервал как 1:30:00 “1 дня” в “25:30:00”?

Вы можете гарантировать порядок с $ или предложением.

. Вместо этого используйте $or: [ _ids.map(_id => ({_id}))].

20
задан Jonathan Leffler 29 December 2008 в 06:00
поделиться

4 ответа

Единственная вещь, с которой я могу идти (около парсинга количества дней и добавления 24 к часам каждый раз):

mat=> select date_part('epoch', '01 day 1:30:00'::interval);
 date_part 
-----------
     91800
(1 row)

Это даст Вам число секунд, которые могут быть хорошо для Excel.

21
ответ дан 29 November 2019 в 22:41
поделиться

Вы могли использовать EXTRACT для преобразования интервала в секунды.

SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
Result: 442800

Затем необходимо было бы сделать собственную математику (или позволить Excel сделать это).

Примечание, что '1 день' не обязательно эквивалентен '24 часам' - PostgreSQL, обрабатывает вещи как интервал, который охватывает переход DST.

18
ответ дан 29 November 2019 в 22:41
поделиться

В стандартном SQL Вы хотите представить тип как ЧАС ИНТЕРВАЛА К ВТОРОМУ, но у Вас есть значение ДНЯ ИНТЕРВАЛА типа К ВТОРОМУ. Разве Вы не можете использовать БРОСОК для получения до необходимого результата? В Informix нотация имела бы любой:

SUM(time.endtime - time.starttime)::INTERVAL HOUR(3) TO SECOND

CAST(SUM(time.endtime - time.starttime) AS INTERVAL HOUR(3) TO SECOND)

Первый, AFAIK, Informix-определенная нотация (или, по крайней мере, не стандартный); последний, я верю, нотация стандарта SQL.

0
ответ дан 29 November 2019 в 22:41
поделиться

Это может быть сделано, но я полагаю, что единственный путь через следующее чудовище (предполагающий, что Ваше имя столбца временного интервала является "ti"):

select
              to_char(floor(extract(epoch from ti)/3600),'FM00')
    || ':' || to_char(floor(cast(extract(epoch from ti) as integer) % 3600 / 60), 'FM00')
    || ':' || to_char(cast(extract(epoch from ti) as integer) % 60,'FM00')
    as hourstamp
from whatever;

Посмотрите? Я сказал Вам, что это было ужасно :)

будет хорошо думать, что

select to_char(ti,'HH24:MI:SS') as hourstamp from t

был бы работавший, но увы, формат HH24 не "поглощает" переполнение вне 24. Вышеупомянутое прибывает (восстановленный из памяти) из некоторого кода, который я однажды написал. Чтобы постараться не нарушать те из тонкой конституции, я инкапсулировал вышеупомянутые интриги в представлении...

0
ответ дан 29 November 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: