2011-01-12 3 views
1

Plain и простой, Кто-нибудь знает, почему это:SQL Server 2000 Integer усечения

Select 30 * 220/30 

Возвращает , что правильный результат, и это:

Select 30 * (220/30) 

Возвращает ???

Во втором случае я понимаю, что 220/30 вычисляется первым, генерируя десятичную (7,333333 ...), но все же ... это не такая паршивая точность?

ответ

4

Под целочисленное деление 220/30 = 7 и 99/100 = 0 (примечание усечение не округления)

использовать не целые числа, чтобы избежать этого. например Select 30 * (220/30.0)

Или вы можете использовать явное cast

Select 30 * (220/cast (30 as float)) 
1

один в скобках, всегда вычисляется первым, но с логикой машины вы используете целое, в этом случае, результат деления 7, умножаемый на 30, дает вам 210