2013-03-19 2 views
7

Если я хочу хранить дату и время, лучше хранить их в отдельной дате и времени или использовать одно время datetime?Когда использовать отдельную дату и время вместо одного дня datetime

Когда мы должны использовать дату и время вместо одного дня?

Я хочу отфильтровать свои запросы, используя дату или время.

+1

Зависит от того, что вам нужно использовать для действительно. Нет веской причины просто использовать его по умолчанию. – CathalMF

ответ

5

В SQL Server 2008 у вас есть date and time data types, поэтому это становится проблемой.

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

Если, например, вы хотите знать, все заказы место между 1 и 2 вечером в любой день с помощью отделенной Date и Time столбца будет делать это быстрее

+0

Это интересный момент, когда запросы выполняются быстрее только для временных интервалов. Есть ли у вас какие-либо данные, чтобы обосновать это или это основано на предпосылках reg-структур? – 2013-03-19 14:39:48

+1

Запрос данных с использованием фильтрации столбцов DATETIME по времени будет более сложным, так как потребуется сканирование –

+0

Да, я хочу запросить мои данные, используя дату в любое время или время для любой даты. – Harke

1

С технической точки зрения дата всегда имеет время и время, всегда являющееся датой. Если вы храните Time в базе данных, у него есть дата по умолчанию, которая применяется к нему. Если вы храните только дату, время будет в полночь в эту дату (00:00:00).

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

+2

э - нет. Это зависит от контекста. Например, часы работы ресторана имеют компоненты времени без фиксированного контекста даты, а День Святого Валентина бывает 14 февраля без какого-либо конкретного времени. –

+0

Я обновлю свой пост. Я имел в виду на техническом уровне, хотя надеялся, что это будет очевидно благодаря капитализации, используемой в словах «Дата и время». – aaroncatlin

8

Когда вы говорите момент времени, является ли универсальный момент или конкретную дату и время на местном календаре, вы используете datetime. Если вы хотите быть уверены, что говорите о точном моменте времени, независимо от наблюдателя, вы используете datetimeoffset.

Если вы храните только date, то вы имеете в виду дату без компонента времени, что означает «в любое время в эту дату».

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

Нет практического пурпуса, чтобы иметь как date, так и time, которые примерно одинаковы, сидя в одном ряду. Просто используйте для этого datetime.

1

Ничего блестящего о отделяя дату и время,

Лучше сэкономить время и дату в том же столбце,

Здесь они обсуждали один и тот же вопрос проверить это: are-there-any-good-reasons-for-keeping-date-and-time-in-separate-columns

вы также можете получить дату и время отдельно по запросу

SELECT 
    CONVERT(VARCHAR(10),GETDATE(),111) as DatePart, 
    convert(varchar(15), getdate(), 108) TimePart 
+0

На самом деле есть некоторые очень веские причины для их расщепления. Например, используйте тип данных Date, когда вам не нравится время .. скажем, дата рождения ... таким образом, ваши расчеты по возрасту намного проще. Тип данных времени отлично подходит для расчета сдвига. Я хочу всех, кто работал в 5 вечера, независимо от даты. Вы можете разделить их так, как вы, но тогда они являются varchar, и некоторые вычисления становятся намного сложнее. Что больше «01: 00: 00 PM» или «12: 30: 00 AM»? –

2

Если вы намеренно не заботитесь о времени, более эффективно хранить эти данные относятся к типу даты. Подумайте, столбец с днем ​​рождения клиента, не так уж много случаев, о которых я могу думать, что будет использовать это время. Если есть время, связанное с ним (часто ошибка), это нужно удалить с помощью инструкции конвертации, чтобы выполнить сравнение. Он также потребляет дополнительное пространство, если вам не нужны эти значения (3 байта по сравнению с 8).

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

Это просто вопрос того, для чего вы используете данные, если вы считаете, что вам действительно нужны эти данные, тогда используйте datetime, иначе используйте дату.

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