я запускаю этот пример в SQL Server Management Studio:SQL Server: SUM() странное поведение
SELECT CONVERT(REAL, -2101.12) n INTO #t
SELECT * FROM #t
SELECT SUM(n) FROM #t
Первый SELECT
создает временную таблицу #t
с 1 колонкой n
типа реального, и это ставит 1 строку он со значением -2101.12
.
Второй SELECT
подтверждает, что таблица создается с предполагаемым содержанием и результатом является:
n
---------
-2101.12
Третий SELECT
суммы единственное число, которое есть, но результат:
-2101.1201171875
Итак, вопрос в том, где: 0.0001171875
?
EDIT: Я знаю отсутствие точности для реальных и плавающих типов данных, к сожалению, я не могу изменить схему базы данных из-за этого. Что меня удивляет, так это то, что я ожидаю увидеть также дополнительные десятичные знаки во втором выборе, поскольку он должен храниться с такой недостаточной точностью. Так как это не происходит во втором выборе, то почему функция суммы выбирает его?
использовать десятичную (18,2) вместо –