Papuccino,
Я не рекомендую типы money и smallmoney, если вы не уверены, что единственная арифметика, которую вы планируете делать, это сложение и вычитание. Если вы можете иметь дело с обменными курсами, процентами и т. Д., Вы рискуете реальными проблемами с этими типами.
Вот только один небольшой пример, показывающий разницу между использованием денег, десятичной дроби и числа с плавающей запятой, когда используется деление. Можно привести примеры, когда разница гораздо более существенная.
declare @m1 money, @m2 money, @m3 money
declare @d1 decimal(19,4), @d2 decimal(19,4), @d3 decimal(19,4)
declare @f1 float, @f2 float, @f3 float;
set @m1 = 1.00;
set @m2 = 345.00;
set @m3 = @m1/@m2;
set @d1 = 1.00;
set @d2 = 345.00;
set @d3 = @d1/@d2;
set @f1 = 1.00;
set @f2 = 345.00;
set @f3 = @f1/@f2;
select @m3, @d3, @f3;
Результат: 0,0028 0,0029 0,00289855072463768
В зависимости от отрасли, могут быть рекомендации или нормативные акты, которые помогут вам выбрать правильный тип данных. Правильного ответа не существует.
Добавлены замечания:
Вы правы в том, что деньги / деньги не должны быть деньгами, но SQL Server (необъяснимо) дает именно такой результат: введите деньги из отношения двух денежных значений. Это фальшивка, но, как вы видите из приведенного ниже примера, это то, что вы получаете, даже если это не имеет смысла:
declare @m1 money, @m2 money;
declare @d1 decimal(19,4), @d2 decimal(19,4);
set @m1 = 1.00;
set @m2 = 345.00;
set @d1 = 1.00;
set @d2 = 345.00;
select @m1/@m2, @d1/@d2
Результат: 0,0028 0,0028985507246376811
Результат с типом money 0.0028 на 3-4% меньше правильного результата.
Конечно, есть много ситуаций, когда вам нужно разделить валютные значения. Опасность использования типа денег заключается в том, что частное является неправильным типом (и ответ не достаточно близок к правильному). Примеры вопросов, требующих деления валюты:
Предположим, вы обменяете 320 юаней, и банк дает вам 47,3 долларов США. Какой обменный курс вам дали?
Предположим, вы инвестируете 23 доллара, а год спустя это стоит 31 доллар. Какова ваша процентная норма прибыли?
Оба эти вычисления требуют деления валютных значений.