2015-10-16 2 views
0

У меня очень странная проблема с SQL. У меня есть ячейка с номером 22, когда я хочу ее округлить, результат неверен.Ошибка в sql с округлением

Если я попытаюсь с номером вместо ячейки, код работает хорошо.

select Mora2, round(Mora2/30,0)*30, mora2+1, 
round((mora2+1)/30,0)*30, round(convert(float,mora2)/30,0)*30 
from Trimestre 

Результатом этого является

Mora2 (No column name) (No column name) (No column name) (No column name) 

22   30     23     30     30 

Если я попробовать с номером, код работает хорошо.

select round(22/30,0)*30 as Mora2 

Mora2 
0 

Почему это возможно?

Спасибо!

+3

Каков тип данных Mora2? Второй пример - целые числа, вы получите другой результат, если вы делаете 22.0/30 –

+0

Привет, Джеймс! Тип данных - float! Кроме того, у меня есть 28573 регистров, но только 866 с такой ошибкой! Вы знаете, почему? – mschapiro

ответ

1

Вы можете CAST(Mora2 AS INT) всякий раз, когда вы используете его для удаления десятичной части и обеспечения целочисленного деления.

Если ни числитель, ни знаменатель не являются целыми числами, результат деления будет иметь десятичные знаки. Таким образом, 22.0/30 = 0.733333 в то время как 22/30 = 0

+0

Да! Это как ты говоришь! С int проблема решена. Странная вещь, которую я не понимаю, это то, что у меня есть 28573 регистров (все похожие на float) с одинаковыми номерами, и только у этой проблемы 866! – mschapiro

Смежные вопросы