Проблема в том, что он выполняет целочисленную математику. Вы можете явно обращаться с ними как с десятичными числами, добавив .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)
Причина, по которой он работает, заключается в том, что стандарт ANSI / ISO-SQL фактически говорит, что результаты математических операций должны быть того же типа данных, что и один из операндов. Поэтому, если оба операнда являются целыми числами, результат в соответствии со стандартом ANSI / ISO-SQL также должен быть целым числом.
MySQL здесь нарушает стандарт (предположительно в интересах практичности), но MS SQL соответствует ему.