Подтвердить что ты не робот

Десятичные значения в 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?

4b9b3361

Ответ 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)