Время в минутах между двумя датами

Изображение msi

Вчера адаптировал решение одной задачи под PostgreSQL.
В частности, требовалось вычислить интервал времени в минутах между двумя датами.
В SQL Server это можно сделать, применив встроенную функцию DateDiff:

SELECT datediff (minute, '2011-10-07T23:43:00', '2011-10-08T01:23:00');

В PG я не нашел ничего лучше как представить разность между датами интервалом, извлечь из него число секунд, и, наконец, поделить на 60, чтобы выразить результат в минутах. Итого:

SELECT extract(epoch FROM cast('2011-10-08T01:23:00' AS timestamp) - cast('2011-10-07T23:43:00' AS timestamp))/60;

Слава богу, что округлять ничего не пришлось, т.к. время в базе указывается с точностью до минуты.
Если есть способы проще, прошу поделиться.

Вот задача, о которой шла речь.

Комментарии

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

А почему функции для работы с датой и временем не смотрели?

http://postgresql.ru.net/manual/functions-datetime.html

По-моему, вместо того, что в скобках можно было бы использовать функцию age, да и extract использовать чтобы извлечь минуты, а не делить то, что в скобках на 60.

А почему функции для работы с датой и временем не смотрели?

Изображение msi

Так смотрел же. Просто я искал функцию, соответствующую DateDiff. А когда ее не нашел, то начал делать вручную. Хорошо, итак:

SELECT extract(epoch FROM age('2011-10-08T01:23:00', '2011-10-07T23:43:00'))/60;

> да и extract использовать чтобы извлечь минуты, а не делить то, что в скобках на 60.

Это я не понял. Запрос

SELECT extract(minute FROM interval '1 hour 40 minute');

вернет 40, а не 100. Поясните, пожалуйста, на примере.

> вернет 40, а не 100.

> вернет 40, а не 100. Поясните, пожалуйста, на примере.
Это видимо я не понял по описанию, что оно извлекает только минутную ЧАСТЬ, а не конвертит в минуты.
Так что в этом случае, вы правы.

Т.е., насколько я понял,

Изображение msi

Т.е., насколько я понял, проще способа нет.
Спасибо.

Моя задача похожа, только

Моя задача похожа, только дата не задается напрямую в запросе, а хранится в таблице (дни рождения сотрудников). Timestamp с полями не работает. Вы не знаете, как это сделать? Задание такое: найти наибольший интервал межде днями рождениями сотрудников в днях (год не учитывается)

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023