Деньги типа данных для хранения значений даты в SQL Server? - PullRequest
3 голосов
/ 09 февраля 2012

Я смотрю на некоторые проблемы с производительностью в базе данных, которую я только что унаследовал.Я вижу, что существует много неявных преобразований из-за запросов, переводящих данные типа деньги в дату.Похоже, что почти все поля дат имеют тип данных money.

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

Спасибо!

Ответы [ 2 ]

6 голосов
/ 09 февраля 2012

Нет абсолютно никаких веских и веских причин для этой практики.

И datetime, и money имеют размер 8 байт.datetime имеет 4 байта, зарезервированных для date, и 4 для time.

money имеет диапазон от -922,337,203,685,477.5808 до 922,337,203,685,477.5807.При приведении от money к datetime целая часть обрабатывается как число дней с 1900-01-01, а дробная часть - как процент дня.

Это означает, что вы теряете точность в time часть (каждая 0.0001 приращение = 8.640 секунд) и получить бесполезную дополнительную шкалу в части date, имея возможность хранить числа, слишком большие, чтобы когда-либо cast успешно, до datetime (который имеет максимумграница 9999 AD)

Если возможно, исправьте схему.

0 голосов
/ 09 февраля 2012

Я думаю, что только для экономии места и иметь субминутную детализацию, но дизайн, очевидно, странный

Возможно, следует избегать при этом границ DATETIME и SMALLDATETIME, но если вы говорите, что он часто используется на сегодняшний день - это маловероятно.

Обновление:

Так как, как сказал @Martin Smith - это не экономит место - тогда дизайн гораздо более странный.

Еще одно предложение - данные были импортированы из старой устаревшей системы БД, где значения даты и времени хранились таким образом.

Obvoiusly - если вы ищете вескую и вескую причину - есть нет .

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