#php #sql #postgresql
#php #sql #postgresql
Вопрос:
Я хотел бы сохранить продолжительность в базе данных, в моем случае это продолжительность тренировки (спорт). Мы устанавливаем, когда мы проводим обучение (дата и время) и как долго длится сеанс (продолжительность).
На данный момент я выбрал Time
тип, затем у меня есть: 01:00:00 в течение часа обучения и извлекаю объект Datetime в PHP (но я думаю, что не идеально суммировать их для примера), и в моей форме у меня нежелательное поведение: тип времени htmlавтоматически устанавливает текущий час, когда время пусто.
Я сомневаюсь в:
- сохраняйте время, кажется логичным / простым иметь что-то вроде: 00:00:00
- сохраните его как секунды или минуты в виде целого числа, возможно, проще сделать сумму суммы обучения для примера (необходимо создать конвертер, чтобы отобразить его как 00:00 или 00: 00:00, и найти хороший способ заполнить его в форме)
- способ, о котором я не думал?
Большое спасибо за вашу помощь.
Комментарии:
1. Звучит как ИНТЕРВАЛ, стандартный тип данных в PostgreSQL. Презентация — это то, что должно быть сделано imho в графическом интерфейсе, а не в базе данных. postgresql.org/docs/current /…
Ответ №1:
Правильный тип данных для хранения длительности — interval
.
Это упрощает выполнение арифметики даты: вы можете просто добавить длительность ко времени начала, чтобы получить время окончания:
SELECT INTERVAL '01:30:00';
interval
----------
01:30:00
(1 row)
SELECT TIME '09:00:00' INTERVAL '01:30:00';
?column?
----------
10:30:00
(1 row)
SELECT TIMESTAMP WITH TIME ZONE '2021-03-28 02:00:00 01' INTERVAL '01:30:00';
?column?
------------------------
2021-03-28 04:30:00 02
(1 row)
Комментарии:
1. Большое спасибо, я не знал этого типа.
Ответ №2:
Я не уверен, в чем заключается ваш вопрос. У Postgres нет проблем с использованием sum()
time
типа данных:
select sum(t)
from (values ('03:12:00'::time), ('05:27:00'), ('18:59')) v(t)
Вы также можете использовать interval
.
У вас могут возникнуть проблемы, если отдельные длительности превышают 24 часа. Если это потенциальная проблема, просто используйте часы, минуты или секунды.
Если у вас есть проблема с «пустыми» значениями, вам нужно будет установить их явно. Это звучит как ошибка на стороне HTML.
Комментарии:
1. Почему
time
и нетinterval
?2. @LaurenzAlbe . . . . Дух. Это тоже имеет смысл. На самом деле больше смысла — за исключением того, что значения, превышающие 24 часа, также начинают включать дни.
3. Спасибо за информацию о сумме времени. Поскольку я не знал тип интервала, я и не думал его использовать. Но, похоже, это лучший способ сделать. Еще раз спасибо за вашу помощь.