Если бы я хотел сохранить промежуток времени в базе данных, какой тип данных я бы использовал? - PullRequest
4 голосов
/ 08 августа 2011

Я бы хотел сохранить продолжительность игры. Что-то вроде 1:43:00 или 0:32:12.

Какой тип данных мне выбрать, если я использую Microsoft SQL Server 2008 R2?

Ответы [ 4 ]

3 голосов
/ 08 августа 2011

Используйте целочисленный тип и просто сохраните количество для наименьшей единицы точности, которая вас интересует (в данном случае, секунд). Код вашей клиентской программы должен беспокоиться о его форматировании. Таким образом, для ваших двух значений выборки сохраненные данные будут 6180 и 1932.

Чтобы показать значения, C # (например) будет использовать что-то вроде TimeSpan.FromSeconds().ToString()

2 голосов
/ 08 августа 2011

Я бы просто сохранил количество секунд. Обычно достаточно хранить две даты, но я думаю, это будет то, что вы отслеживаете в самой игре или за сеанс.

2 голосов
/ 08 августа 2011

Или:

TIME тип данных ...

или сохраните время начала и окончания как smalldatetime

Я бы сказал, хранить 2 записи как smalldatetime, поэтому у вас есть возможность работать дольше, чем 24 часа без необходимости изменять структуру данных.

1 голос
/ 08 августа 2011

Может быть лучше сохранить время начала и окончания игры, а также рассчитать продолжительность на лету, если это необходимо.Таким образом, вы можете изменить время начала и / или окончания без необходимости явно обновлять продолжительность.

Что касается вашего вопроса, я бы использовал тип данных int и сохранял бы продолжительность в минутах.Храня его в считанные минуты, вы можете легко преобразовать его в часы.Функция DATEDIFF уже возвращает INT, поэтому вам не нужно делать никаких дополнительных манипуляций.

DECLARE @TotalMinutes INT
SELECT @TotalMinutes = DATEDIFF(MINUTE, StartTime, EndTime)
...