Да. datetime будет гораздо более эффективным для вычислений даты, чем varchar или nvarchar (почему nvarchar - у вас нет способа получить настоящий юникод, верно?). Плюс строки могут быть неверными и неверно истолкованы.
Если вы используете только часть даты, ваша система может иметь уменьшенную версию datetime только для даты.
Кроме того, если вы просто выполняете объединения и определенные типы операций (>/</=
сравнения, но не датированные), столбец «id» даты, который на самом деле представляет собой int формы yyyymmdd, обычно используется в хранилищах данных. К сожалению, это допускает «недопустимые» даты, но также допускает более очевидные зарезервированные, «специальные» даты, тогда как в datetime вы можете использовать NULL
от 01.01.1900 или что-то еще. Целостность, как правило, обеспечивается с помощью ограничения ключевого ключа для «измерения» даты.
Видя, что вы пометили вопрос как "sql server", я предполагаю, что вы используете какую-то версию SQL Server, поэтому я рекомендую вам использовать либо datetime
, либо smalldatetime
. Кроме того, в SQL Server 2008 у вас есть тип date
, а также datetime2
с гораздо большим диапазоном. Проверьте эту ссылку , которая дает некоторые детали