Ну, мне нравится MONEY
! Это на байт дешевле чем DECIMAL
, и вычисления выполняются быстрее, потому что (под прикрытием) операции сложения и вычитания по существу являются целочисленными операциями. Пример @ SQLMenace, который является отличным предупреждением для незнающих, может в равной степени быть применен к INT
egers, где результат будет нулевым. Но это не причина не использовать целые числа - где это уместно .
Таким образом, это совершенно «безопасно» и уместно использовать, MONEY
когда вы имеете дело с тем, с чем вы имеете дело, MONEY
и использовать его в соответствии с математическими правилами, которым оно следует (так же, как INT
eger).
Было бы лучше, если бы SQL Server способствовал делению и умножению MONEY
s на DECIMAL
s (или FLOAT
s?) - возможно, но они не решили делать это; и при этом они не решили продвигать INT
егеров к FLOAT
s, разделяя их.
MONEY
не имеет проблем с точностью; что DECIMAL
добудет иметь больший промежуточный тип , используемый при расчетах просто «функция» с использованием этого типа (и я на самом деле не знаю , как далеко , что «функция» распространяется).
Чтобы ответить на конкретный вопрос, «веская причина»? Ну, если вы хотите абсолютную максимальную производительность вSUM(x)
где x
может быть либо, DECIMAL
либо MONEY
, то MONEY
будет иметь преимущество.
Кроме того, не забывайте, что это двоюродный брат меньшего размера - SMALLMONEY
всего 4 байта, но он имеет максимальный размер 214,748.3647
- который довольно мал для денег - и поэтому не всегда подходит.
Чтобы доказать смысл использования больших промежуточных типов, если вы явно присваиваете промежуточное значение переменной, DECIMAL
возникает та же проблема:
declare @a decimal(19,4)
declare @b decimal(19,4)
declare @c decimal(19,4)
declare @d decimal(19,4)
select @a = 100, @b = 339, @c = 10000
set @d = @a/@b
set @d = @d*@c
select @d
Производит 2950.0000
(хорошо, так по крайней мере DECIMAL
округлено, а не MONEY
усечено - так же, как целое число).
DECIMAL(19, 4)
популярный выбор, проверьте это, также проверьте здесь Форматы Мировой валюты, чтобы решить, сколько десятичных знаков использовать, надеюсь, поможет.