QueryКак получить точный общей
Select 9/5
«Отображение вывода в 1
Я хочу, чтобы получить точный для 9/5 вывода
Прогнозного Ouput
1.8 instead of 1
Как сделать запрос
QueryКак получить точный общей
Select 9/5
«Отображение вывода в 1
Я хочу, чтобы получить точный для 9/5 вывода
Прогнозного Ouput
1.8 instead of 1
Как сделать запрос
Проблема в том, что это целочисленная математика. Вы можете явно рассматривать их в качестве десятичных чисел путем добавления .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 соответствует ему.
У меня нет доступа к sql-серверу, и mysql, кажется, дает правильный ответ. Тем не менее, я бы попытался заставить один или оба аргумента быть float (т. Е. SELECT 9.0 /5.0)
use (float) to cast! он работает в C++: D – Ocelot