Сравнение столбцов Money и Decimal (13,4) в SQLServer - PullRequest
0 голосов
/ 29 июня 2011

У меня есть 2 разных столбца в 2 таблицах, один с типом данных Money в таблице 1 и другой с десятичным (13,4) в таблице 2. Мне нужно суммировать значения в таблице 2 и сравнивать их со значением в таблице 1 (HAmount). Однако я нашел значения, как показано ниже, пожалуйста, предложите, как это сравнить.

Table1
HAmount
120.4500

Table2
DAmount
60.2285 
60.2200

IF(HAmount=SUM(DAmount))
BEGIN
    Success
END
ELSE
    Failed

Ответы [ 3 ]

3 голосов
/ 29 июня 2011

Просто конвертируйте все в DECIMAL (13,2):

IF(CAST(HAmount as DECIMAL(13,2) = SUM(CAST(DAmount as DECIMAL(13,2)))

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

0 голосов
/ 29 июня 2011

Оба этих типа данных [money и decimal (13,40)] могут точно хранить значения с четырьмя десятичными знаками. Полные значения могут отображаться или не отображаться в зависимости от того, как настроены SSMS или пользовательский интерфейс по вашему выбору, но они есть. Эта денежная стоимость 120,45 может на самом деле быть 120,4485, и дисплей округляет ее для вас. Если нет, и если предполагается, что два значения складываются в одно, то может показаться, что вы каким-то образом получили поврежденные данные ... и это другая и более серьезная проблема.


Для округления числовых функций в T-SQL вы используете функцию ROUND. Вот быстрый пример:

declare
  @Foo1 money
 ,@foo2 decimal(13,4)

set @Foo1 = 66.2285
set @Foo2 = 66.2285

print @foo1
print str(@foo1, 7,4) + '  ("true value" of the money value)'
print @foo2

print ''
print round(@foo1,2)
print str(round(@foo1,2), 7,4) + '  ("true value" of the ROUNDED money value)'
print round(@foo2,2)

Вы хотите быть очень осторожными при работе с неточными значениями (т.е. требуется округление), особенно когда вы имеете дело с деньгами!

0 голосов
/ 29 июня 2011

См. Таблицу конвертации / приведения на этой странице Microsoft . В нем говорится о неявном преобразовании между десятичной дробью и деньгами.

Вы можете использовать ключевое слово BETWEEN, чтобы помочь вам с дробными копейками.

...