2010-03-15 2 views
0

Я рассматриваю возможность хранения значений даты как int. i.e 201003150900База данных: Сохранение дат как числовых значений

За исключением того факта, что я теряю информацию о часовом поясе, есть ли что-то еще, что меня должно беспокоить с его решением? Любые запросы, использующие этот столбец, будут простыми типами поиска «где после или до». i.e Если датаполе меньше 201103000000 (до марта следующего года).

В настоящее время приложение использует MSSQL2005. Любые указатели на подводные камни оцениваются.

+2

и что не так с использованием обычных типов данных datetime? –

+0

Я обнаружил, что делаю много трюков с учетом часовой пояс для различных решений ui/view. ДБ находится в другом часовом поясе, где приложение используется преимущественно. – Chin

+1

Повтор разных часовых поясов: сохранить даты в UTC, 'SELECT DATEDIFF (час, GETDATE(), GETUTCDATE())', чтобы найти смещение и перейти оттуда. Таким образом, когда ваш сервер db и/или пользователи перемещаются, ничего не меняется. – tadamson

ответ

3

Использование надлежащего типа данных datetime даст вам более эффективное хранилище (smalldatetime потребляет 4 байта) и индексирует и даст вам семантику, которая будет легче развиваться против. Вам придется придумать убедительный аргумент, чтобы не использовать их.

+0

Не знал, что предполагаемое значение int должно быть меньше. Благодарю. – Chin

+0

Оба 'smalldatetime' и' int' потребляют четыре байта, но дата примера, указанная вами в вашем вопросе, не может быть представлена ​​в int - она ​​слишком большая. Рад, что смог помочь. –

+0

правый. Спасибо – Chin

1

Почему бы вам не использовать надлежащее UNIX timestamps? Они тоже просто ints, но они не так широко распространены, как 201103000000.

+0

+1 для использования установленного стандарта вместо того, чтобы изобретать свои собственные. Также: некоторые операции - например, поиск количества секунд между двумя датами - становятся тривиальными. –

+1

И некоторые операции, такие как добавление месяцев/лет, становятся практически невозможными, не возвращая его к дате/дате и выполнению всего перевода взад и вперед. Внутреннее представление уже является числом; зачем отказываться от своих собственных и писать на него свои собственные библиотеки? –

+0

До встречи в 2038 году –

1

Просто используйте типы данных DATETIME или SMALLDATETIME, которые они более гибкие.

1

Единственная причина, по которой вы предлагаете, - это указать имя члена измерения времени для инструмента бизнес-аналитики. Если это то, что вы собираетесь использовать для этого, тогда это имеет смысл.

В противном случае используйте встроенные типы времени, как указывали другие.

Смежные вопросы