Как получить результат с плавающей запятой путем деления двух целочисленных значений с использованием 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