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