длительности хранения (временные промежутки) на сервере sql - PullRequest
21 голосов
/ 06 мая 2011

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

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

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

Кто-нибудь имеет опыт работы с этим?

Ответы [ 3 ]

19 голосов
/ 06 мая 2011

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

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

2 голосов
/ 06 мая 2011

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

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

0 голосов
/ 06 мая 2011

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

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

...