В Microsoft SQL Server 2005, почему следующие команды приводят к целочисленным результатам?
SELECT cast(151/6 AS DECIMAL(9,2))
SELECT 151/6
Сначала вы получаете результат двух целых чисел, а затем преобразовываете результат в DECIMAL (9,2). Во втором случае вы просто делите два целых числа, и это ожидаемо.
Если вы приведете одно из целых чисел как десятичное ПЕРЕД вы сделаете деление, вы получите десятичный результат.
SELECT 151/CAST(6 AS DECIMAL (9,2))
Да, это стандартное поведение
do
SELECT 151/6.0
или
SELECT 151/(CONVERT(DECIMAL(9,2),6))
или
SELECT 151/(6 * 1.0)
Поскольку 151 и 6 - целые числа, и вы выполняете целочисленное деление, даже до приведения.
Вам нужно убедиться, что хотя бы один из аргументов является типом float:
SELECT 151.0/6
Or
SELECT 151/6.0
По той же причине, что и в c#, java и других основных языках.
Целочисленная арифметика, CAST после математики...