Формат даты в SQL Server - PullRequest
       10

Формат даты в SQL Server

1 голос
/ 13 ноября 2009

Краткий вопрос:

Какой формат даты лучше использовать в SQL Server?

Длинное объяснение:

Мы конвертируем нашу базу данных из mysql в SQL Server. В mysql мы всегда использовали int(11), чтобы избежать проблемы перехода на летнее время. Должны ли мы делать то же самое в mysql (или достаточно DATETIME)?

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

Мы используем 2005 (вздох), но я бы тоже хотел услышать о 2008.

Ответы [ 7 ]

4 голосов
/ 13 ноября 2009

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

В этом случае, поскольку у вас, по-видимому, уже есть код для обработки преобразований типа int => datetime, где это необходимо, вы также можете придерживаться этого.

С другой стороны, если вы собираетесь использовать SQL Server 2008 (а не 2000 или 2005), есть новые типы datetime2 и datetimeoffset, которые могут лучше соответствовать вашим потребностям, и вы можете рассмотреть возможность рефакторинга.

4 голосов
/ 13 ноября 2009

Я всегда использовал DATETIME для хранения времени на MSSQL Server. Это делает функции даты и времени довольно простыми - я не уверен, сколько нужно написать собственного кода, чтобы получить тот же уровень функциональности и скорости при обработке даты / времени с использованием int. Чтобы бороться с проблемой перехода на летнее время, вы можете хранить дату и время в формате UTC вместо времени сервера. Вместо использования DateTime.Now или getDate() вы можете использовать DateTime.UtcNow и getutcdate().

2 голосов
/ 13 ноября 2009

Я согласен с Дейвом К, все даты должны храниться в виде типов данных.

При этом существует ли конкретная причина для хранения дат, как у какого-то другого типа? Если вы столкнетесь с проблемой преобразования формата даты в какой-либо другой тип и, возможно, позже снова вернетесь в формат даты, в чем причина всех этих усилий?

2 голосов
/ 13 ноября 2009

Я думаю, что даты всегда должны быть сохранены как типы дат (с часовыми поясами, временными частями в / исключены при необходимости).

См. Здесь о возможностях (при условии, что вы используете SQL Server 2008):

http://msdn.microsoft.com/en-us/library/ms187752.aspx

0 голосов
/ 13 ноября 2009

С SQL Server 2008 вы получаете множество типов дат:

  • Малый срок хранения Хранение в 4 байта, без второй точности
  • DATETIME 8-байтовое хранилище, точность 3 мс
  • DATETIME2 имеет пользовательские прецеденты
  • DATETIMEOFFSET имеет информацию о часовом поясе
  • ДАТА только день, без времени
  • ВРЕМЯ без информации о дне, только время суток, хорошо для планирования

Итак, подбери свой яд.

0 голосов
/ 13 ноября 2009

Параметр easyies обычно хранит дату / время в столбце типа datetime и всегда хранит время в часовом поясе UTC. Таким образом, у вас никогда не будет проблем с сохранением дневного света. Затем вы можете, очевидно, преобразовать время в любой часовой пояс, который использует клиент, прежде чем отобразить значение.

0 голосов
/ 13 ноября 2009

это зависит от того, что вам нужно и как далеко ваши данные идут, а также от того, какую версию сервера SQL вы собираетесь использовать. В 2008 году появились новые типы дат, которых нет в 2005 году.

типы данных

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