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

Почему SQL Server завершает результаты деления двух целых чисел?

У меня есть таблица с маленьким столбцом, который содержит проценты в виде целых чисел (т.е. 50, 75, 85 и т.д.).

Когда я делю этот столбец на 100, как в

SELECT MY_COLUMN/100 AS PCT_AS_FRACTION
FROM MY_TABLE

результат округляется до ближайшего целого числа. Например, для строки, которая содержит число "50", я получаю нуль в качестве результата.

Я могу дублировать это с помощью простого оператора:

SELECT 50 / 100 AS TEST_VALUE

Почему это, и как я могу получить больше точности в моем результате?

4b9b3361

Ответ 1

Когда вы выполняете целочисленное деление (целое число, деленное на целое число), вы всегда получаете целочисленный ответ. 50/100 =.50, что равно 0 в целом.

Вы пытались делить MY_COLUMN на 100.0?

Ответ 2

Ввести целые числа.

SELECT (cast(50 AS float)/100)

Ответ 3

Вы выполняете целочисленное деление. 50/100 равно 0 с остатком 50.

Вам нужно использовать деление с плавающей запятой.

Ответ 4

NB. Будьте осторожны, так как остаток целочисленного деления не округляется. Скорее, он отбрасывается. Это эквивалентно вызову функции sql FLOOR.

Это обычное явление и определяется как таковое, потому что при умножении двух целых чисел фракция никогда не произойдет. Поэтому при умножении целых чисел никогда не следует использовать методологию обработки фракций, но то же самое нельзя сказать о целочисленном делении.

Это может часто иметь значение при выполнении арифметики dateTime в SQL.

Ответ 5

Когда вы используете /(Divide), оператор

Возвращает тип данных аргумента с более высоким приоритетом.

и

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

Итак, вам нужно указать хотя бы один из операндов для соответствующего типа: десятичный и числовой или float или real.

Ответ 6

Вы делите 2 целых числа, которые приводят к другому целому числу.

Это тоже возможно сделать тоже

SELECT (50/100):: numeric;