Как получить результат с плавающей запятой путем деления двух целочисленных значений с использованием T-SQL?
Используя T-SQL и Microsoft SQL Server, я хотел бы указать количество десятичных цифр, когда делаю 2 целых числа, например:
select 1/3
Это в настоящее время возвращает 0
. Я бы хотел, чтобы он вернулся 0,33
.
Что-то вроде:
select round(1/3, -2)
Но это не работает. Как мне достичь желаемого результата?
Ответы
Ответ 1
Предложения от stb и xiowl хороши, если вы ищете константу. Если вам нужно использовать существующие поля или параметры, которые являются целыми числами, вы можете сначала их перенести:
SELECT CAST(1 AS float) / CAST(3 AS float)
или
SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
Ответ 2
Поскольку SQL Server выполняет целочисленное деление. Попробуйте следующее:
select 1 * 1.0 / 3
Это полезно, когда вы передаете целые числа в качестве параметров.
select x * 1.0 / y
Ответ 3
Не нужно бросать их обоих. Тип данных результата для разделения всегда совпадает с более высоким приоритетом типа данных. Таким образом, решение должно быть:
SELECT CAST(1 AS float) / 3
или
SELECT 1 / CAST(3 AS float)
Ответ 4
использовать
select 1/3.0
Это выполнит задание.
Ответ 5
Возможно, будет немного поздно, но вы поймете, что CAST
в FLOAT
не разрешен в MySQL и вызовет ошибку при попытке выполнить CAST(1 AS float)
как указано в MySQL dev.
Обойти это просто. Просто делать
(1 + 0.0)
Затем используйте ROUND
для получения определенного количества десятичных знаков, таких как
ROUND((1+0.0)/(2+0.0), 3)
Вышеприведенный SQL делит 1 на 2 и возвращает число с плавающей запятой с 3 десятичными знаками, так как в нем будет 0.500
.
Можно CAST
к следующим типам: двоичный, символ, дата, дата и время, десятичное число, json, nchar, подписанный, время и без знака.
Ответ 6
Похоже, этот трюк работает в SQL Server и короче (основывается на предыдущих ответах)
SELECT 1.0*MyInt1/MyInt2
Или:
SELECT (1.0*MyInt1)/MyInt2
Ответ 7
Используйте этот
select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result
Здесь в этом sql сначала преобразуется в float или умножается на 1.00. Какой вывод будет номером float. Здесь я рассматриваю 2 десятичных знака. Вы можете выбрать, что вам нужно.
Ответ 8
Если вы пришли сюда (как и я), чтобы найти решение для целочисленного значения, вот ответ:
CAST(9/2 AS UNSIGNED)
возвращает 5