2012-02-25 2 views

ответ

5

Проблема в том, что это целочисленная математика. Вы можете явно рассматривать их в качестве десятичных чисел путем добавления .0:

SELECT 9.0/5.0 

Вы также можете использовать CONVERT или CAST, чтобы быть еще более четко:

SELECT CONVERT(DECIMAL(9,4), 9)/CONVERT(DECIMAL(9,4), 5) 

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

SELECT 9/5.0 
SELECT 9.0/5 
SELECT CONVERT(DECIMAL(9,4), 9)/5 
SELECT 9/CONVERT(DECIMAL(9,4), 5) 

Причина, по которой работает это происходит потому, что/ISO-SQL стандарт ANSI фактически говорит о том, что результаты математических операций должны быть того же типа данных в качестве одного из операндов. Поэтому, если оба операнда являются целыми числами, результат в соответствии со стандартом ANSI/ISO-SQL также должен быть целым числом.

MySQL нарушает стандарт здесь (предположительно в интересах практичности), но MS SQL соответствует ему.

0

У меня нет доступа к sql-серверу, и mysql, кажется, дает правильный ответ. Тем не менее, я бы попытался заставить один или оба аргумента быть float (т. Е. SELECT 9.0 /5.0)

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