Десятичные значения в SQL для разделения результатов - PullRequest
46 голосов
/ 29 января 2011

В 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?

Ответы [ 5 ]

95 голосов
/ 29 января 2011

Просто другой подход:

SELECT col1 * 1.0 / col2 FROM tbl1

Умножение на 1,0 превращает целое число в число с плавающей запятой , числовое (13,1) и, таким образом, работает как типизация, но, скорее всего, оно медленнее.

Немного более короткий вариант, предложенный Александром Федоренко в комментарии:

SELECT col1 * 1. / col2 FROM tbl1

Эффект будет в основном таким же. Единственное отличие состоит в том, что результат умножения в этом случае будет числовым (12,0) .

Основное преимущество: менее многословно, чем другие подходы.

43 голосов
/ 29 января 2011

Вам нужно привести или преобразовать значения в десятичную форму перед делением.Взгляните на это 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

13 голосов
/ 29 января 2011

SELECT CAST (col1 as float) / col2 FROM tbl1

Один актерский состав должен работать.(«Меньше значит больше».)

From Books Online :

Возвращает тип данных аргумента с более высоким приоритетом.Для получения дополнительной информации о приоритетах типов данных см. Приоритет типов данных (Transact-SQL) .

Если целое число делимое делится на целое число делитель , результатом является целое число, у которого любая дробная часть результата усечена

3 голосов
/ 22 июля 2015
CAST( ROUND(columnA *1.00 / columnB, 2) AS FLOAT)
3 голосов
/ 29 января 2011

Могут быть и другие способы получить желаемый результат.

Declare @a int
Declare @b int
SET @a = 3
SET @b=2
SELECT cast((cast(@a as float)/ cast(@b as float)) as float)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...