Как хранить продолжительность времени в БД - PullRequest
1 голос
/ 06 января 2011

Как лучше всего хранить в базе данных такие вещи, как «7 лет 4 месяца» (например, многолетний опыт) Поплавок

Ответы [ 7 ]

6 голосов
/ 06 января 2011

Сохраните BIGINT количество секунд или тиков.

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

2 голосов
/ 06 января 2011

Поскольку в SQL-сервере 2005 отсутствуют типы данных только для времени, я бы использовал целочисленный тип соответствующего размера для хранения счетчика «некоторого временного интервала» - секунды, миллисекунды и т. Д. Я сделал бы все переводы(кроме сравнений) на уровне приложения;у БД нет причин беспокоиться о них, кроме как int / bigint / etc

2 голосов
/ 06 января 2011

Используйте long [read bigint for SQLServer] для представления разницы во времени, преобразованной в секунды

0 голосов
/ 07 января 2011

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

Так что "7 лет 4 месяца" будет равно = 7 + 4/12 = 7,333 ..

0 голосов
/ 06 января 2011

Зависит от того, хранится ли период времени, т. Е. Даты начала и окончания, это становится производным значением, и вы можете рассчитывать каждый раз.

Если вы собираетесь хранить 7.4 для симуляции года. Месяц, тогда вы ограничены в своей детализации. Вы никогда не сможете отобразить недели, что произойдет, если будет добавлено значение для 7,14?

0 голосов
/ 06 января 2011

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

Время до настоящего времени должно быть рассчитано во время выполнения.

Редактировать: При необходимости вы также можете сохранить дату окончания для использования в расчете времени выполнения.

0 голосов
/ 06 января 2011

Храните как есть. То есть строка 7 years 4 months. Зачем? Хорошо, давайте подумаем с другого конца - что такое 7 лет (или 4 месяца)? На первый взгляд можно подумать, что это временной интервал, но это не так. Ни месяц, ни год не содержат статического числа единиц времени (дней), поэтому фактическое значение будет различным в зависимости от начальной точки вашего интервала.

Спасибо за все минусы, но на самом деле это единственный ответ, который отвечает на вопрос как есть. 7 years 4 months не является сериализуемым значением без начальной точки. Поэтому представление == значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...