Десятичные значения в SQL для деления результатов
В SQL у меня есть col1
и col2
. Оба являются целыми числами.
Я хочу сделать как:
select col1/col2 from tbl1
Получаю результат 1
, где col1=3
и col2=2
В результате я хочу 1.1
Я положил round(col1/col2,2)
. Результат по-прежнему равен 1.
Я положил decimal(col1/col2,2)
. Десятичная функция не встроена в функцию.
Как я могу сделать точно, чтобы получить 1.1?
Ответы
Ответ 1
Вам необходимо будет преобразовать значения в десятичные числа перед делением. Взгляните на это
http://msdn.microsoft.com/en-us/library/aa226054.aspx
Например
DECLARE @num1 int = 3 DECLARE @num2 int = 2
SELECT @num1/@num2
SELECT @num1/CONVERT(decimal(4,2), @num2)
Первый SELECT приведет к тому, что вы видите, а второй SELECT будет иметь правильный ответ 1.500000
Ответ 2
Еще один подход:
SELECT col1 * 1.0 / col2 FROM tbl1
Умножение на 1.0 превращает целое число в float числовое (13,1) и поэтому работает как тип, но, скорее всего, он медленнее, чем это.
Преимущества: менее многословный.
Ответ 3
SELECT CAST (col1 as float) / col2 FROM tbl1
Один актер должен работать. ( "Меньше больше".)
От Электронная книга в Интернете:
Возвращает тип данных аргумента с более высоким приоритетом. Для получения дополнительной информации о приоритете типа данных см. Приоритет типа данных (Transact-SQL).
Если целочисленное дивиденд делится на целочисленный делитель, результатом является целое число, которое имеет любую дробную часть усеченного результата
Ответ 4
Могут быть другие способы получить желаемый результат.
Declare @a int
Declare @b int
SET @a = 3
SET @b=2
SELECT cast((cast(@a as float)/ cast(@b as float)) as float)
Ответ 5
CAST( ROUND(columnA *1.00 / columnB, 2) AS FLOAT)