Как правильно хранить ВРЕМЯ дня в SQL?
Имейте поле, которое заботится только о том, когда произошло действие. Примерные значения будут 14:30 или 14:30, мне не важно какие. Это значение НИКОГДА (ха, ха) не будет добавляться, вычитаться, сравниваться и т. Д. Это просто статический атрибут.
Если вы используете Microsoft SQL Server или MySQL (я уверен, что другие тоже поддержат это, но это единственные 2, которые я точно знаю), они оба содержат выделенный тип данных для хранения значений времени.
Я всегда рекомендую хранить такие вещи, как дата и время, в их специальных форматах (DATE
, TIME
, DATETIME
и т. д.), потому что тогда, если вам нужно запросить значения или иным образом манипулировать ими, это упрощает написание SQL, поскольку механизм SQL знает, какие данные находятся в поле. Если вы сохранили дату или время в VARCHAR
например, вы можете или не можете (зависит от движка базы данных) иметь возможность написать запрос, в котором указано SomeDateTimeField >= '2011-01-01 09:00:00' AND SomeDateTimeField <= '2011-01-01 17:00:00'
без рвоты, например.
Для справки: SQL Server и MySQL TIME
информация о типе данных здесь.
Существует множество вариантов - самые большие три:
Используйте INTEGER
сохранение значений time_t в Unix (секунды с 01.01.1970)
(Если вы пойдете по этому маршруту, убедитесь, что вы используете как минимум 64-битное целое число)
Используйте типы даты и времени SQL
(TIME
, DATETIME
, TIMESTAMP
и т. д. - Список доступных типов зависит от сервера БД)
Используйте скучный VARCHAR
поле
(Не делайте этого. Ваше «НИКОГДА» выше превратится в «Ну, только один раз ...»)
Самый «правильный» способ - использовать типы даты и времени для вашей реализации SQL. Обычно это позволяет вам использовать встроенные команды сравнения и форматирования дат.
Ближайшая секунда - это значения integer / time_t, поскольку есть четко определенные функции для преобразования и обработки этого представления даты.