Подтвердить что ты не робот

Сохранение продолжительности (timespans) в sql-сервере

Мне нужно сохранить продолжительность в базе данных SQL Server 2008. Как это обычно делается?

Например, мне нужно будет хранить такие значения, как: 5 минут, 8 часов, 10 дней и т.д.

Я думал хранить его в поле smalldatetime как mindatetime + timespan. Или, может быть, как int, представляющий смещение к некоторой минимальной дате.

У кого-нибудь есть опыт?

4b9b3361

Ответ 1

Если время начала является значительным (потому что вы, например, записываете событие), вы всегда захотите сохранить его как дату-время, чтобы вы могли его прочитать позже, сохранение последующей продолжительности может быть просто еще одним "завершенным" дат-временем.

Если это произвольная длительность (длина фильма и т.д.), я бы просто сохранил ее как секунды целого числа, а затем добавил префиксный код на уровне презентации, чтобы отобразить его как часы/дни и т.д.

Ответ 2

То, что я сделал бы, это иметь 2 столбца, один из которых был последним, когда событие было уволено, а другое - как долго между огнями события. Таким образом, вы можете сделать запрос dateDiff между последним запущенным и now() и посмотреть, больше ли это значение, чем продолжительность между огнями.

Что касается значения продолжительности, я бы это был минимальное значение времени, которое вам нужно. Таким образом, если у вас минимальное значение составляет 5 минут, то столбец должен быть в минутах. если у вас минимальное значение в секундах, то оно должно быть в секундах.

Ответ 3

Одним словом осторожности при использовании подхода с начальным и конечным временем является изменение времени перехода на летнее время. Вы должны убедиться, что тип данных SQL Server, который вы используете, поддерживает информацию о часовом поясе. Кроме того, вам необходимо убедиться, что он поддерживает историческую информацию об изменении DST. Например, до 2007 года в США правила перехода на летнее время были разными, чем в настоящее время.

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