Postgresql: интервал смещения от ЧЧ:ММ:СС до 00:ЧЧ:ММ

У меня есть таблица, в которой существует столбец интервального типа Duration. В настоящее время значения выражаются как HH:MM:SS с такими данными, как:

15:32:00
17:01:00
16:02:00
... 

Проблема в том, что на самом деле данные напоминают только минуты и секунды, и значения столбца должны быть обновлены, чтобы значения стали такими:

15:32:00 -> 00:15:32
17:01:00 -> 00:17:01
16:02:00 -> 00:16:02

...

Какой запрос следует выполнить для столбца?


person KLaine    schedule 06.09.2012    source источник
comment
каков тип данных столбца?   -  person Joe G Joseph    schedule 06.09.2012


Ответы (1)


SELECT EXTRACT(hour FROM duration) * INTERVAL '1' minute + EXTRACT(minute FROM duration) * INTERVAL '1' second
FROM tbl
;

ИЗМЕНИТЬ

Это был мой первоначальный ответ, который не отвечает на исходный вопрос:

Вы можете попробовать что-то вроде этого:

SELECT duration - EXTRACT(hour FROM duration) * INTERVAL '1' hour
FROM tbl
;

Что извлекает часовую часть из интервала и вычитает ее из исходного значения. Перепишите как UPDATE, если вам действительно нужно обновить данные.

person dezso    schedule 06.09.2012
comment
Вы можете написать эту конструкцию интервала как extract(hour from duration) * INTERVAL '1' hour) для лучшей читабельности, кстати. - person Craig Ringer; 06.09.2012
comment
Это снимает всего несколько часов. Необходимо добиться того, чтобы первоначальные часы стали новыми минутами, а первоначальные минуты стали новыми секундами. Но этот ответ дал мне хорошее представление о том, как подойти к проблеме, и я опубликую его как ответ самому себе. - person KLaine; 06.09.2012