Рекомендуется ли разделять время и дату на два отдельных столбца даты на сервере SQL? - PullRequest
2 голосов
/ 17 декабря 2010

Рекомендуется ли разделять dateTime на два столбца SQL datetime?

Например, 2010-12-17 01: 55: 00.000 ставится в два столбца,

  • один столбец, содержащий дату и время для части даты: 2010-12-17 00: 00: 00.000
  • один столбец, содержащий дату и время для части времени: 1900-01-01 01: 55: 00.000

Мне говорят, что это лучшая практика, потому что в какой-то момент SQL 2000 не позволял устанавливать время в дате?и что существуют даже стандарты хранения данных, которые обеспечивают это, и что некоторые компании обеспечивают, чтобы все их данные хранились таким образом, чтобы соответствовать некоторым стандартам хранения данных?

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

Ответы [ 3 ]

12 голосов
/ 17 декабря 2010

В SQL Server 2008 у вас есть типы данных даты и времени, поэтому это не проблема. datetime всегда разрешено для времени даже в sql server 6 и 7

причина, по которой люди разделяют его, состоит в том, что при наличии всего в 1 столбце запрос, который возвращает все заказы, размещенные между 15 и 16 часами за любой день, требует сканирования, а по столбцу времени это может быть выполнено с помощью поиска (много, много быстрее)

4 голосов
/ 17 декабря 2010

Начиная с SQL 2005 я бы сделал только один столбец.

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

0 голосов
/ 19 апреля 2013

Я знаю, что это старая версия, но другая причина, по которой вы можете захотеть разделить, связана с пользовательским вводом (и GenEric сказал в комментарии, что это для управления временем).Если вы разрешаете пользователям вводить дату / время в виде отдельных полей и хотите иметь возможность сохранять данные, когда любое из полей не заполнено, желательно иметь 2 отдельных пустых поля в вашей базе данных.В противном случае, я думаю, вам придется прибегнуть к кладжам, в которых определенные значения даты равны «пустым», или добавить дополнительные битовые поля в качестве флагов «нет времени / нет даты».

...