В Microsoft SQL Server 2005, почему следующие команды производят целые результаты?
SELECT cast(151/6 AS DECIMAL(9,2))
SELECT 151/6
Ответ 1
В первом вы получаете результат двух целых чисел, а затем выставляете результат как DECIMAL (9,2). Во втором вы просто разделите два целых числа и ожидаете.
Если вы разделили одно из целых чисел как десятичное до того, как вы выполните деление, вы получите десятичный результат.
SELECT 151/CAST(6 AS DECIMAL (9,2))
Ответ 2
Да, это стандартное поведение
do
SELECT 151/6.0
или
SELECT 151/(CONVERT(DECIMAL(9,2),6))
или
SELECT 151/(6 * 1.0)
Ответ 3
Так как 151 и 6 являются целыми числами, и вы выполняете целочисленное деление, даже перед литой.
Вам нужно убедиться, что хотя бы один из аргументов является типом float:
SELECT 151.0/6
или
SELECT 151/6.0
Ответ 4
Не прямой ответ на ваш вопрос. Еще стоит взглянуть на Операторы в выражениях, если вам это нужно в SSRS
/ Делит два числа и возвращает результат с плавающей запятой.
\ Делит два числа и возвращает результат целочисленный.
Мод Возвращает целочисленный остаток деления.
Ответ 5
Вам также нужно указать место для десятичных знаков
Пример
SELECT 151.000000/6
OR
SELECT 151/6.000000
Оба будут производить
25.16666666
Ответ 6
По той же причине они были бы в С#, java и других основных языках.
Integer 'rithmatic, CAST после математики...
Ответ 7
Попробуйте следующее:
SELECT 1.0*cast(151/6 AS DECIMAL(9,2))
SELECT 1.0*151/6