Причиной ваших неожиданных результатов является неявное преобразование типа данных , и при делении двух целочисленных значений результат также будет целым числом.
Вы можете попробовать использовать следующий код(снова с неявным преобразованием типов данных, сделанным сервером):
declare @DaysinMonth int = DAY(EOMONTH(GETDATE())) -- 31
declare @DaysRemaining int = @DaysinMonth - DAY(GETDATE()) -- 24
SELECT
(DAY(EOMONTH(GETDATE())) - DAY(GETDATE())) as DaysRemaining,
@DaysinMonth as DaysinMonth,
@DaysRemaining as DaysRemaining2,
(1.0 * 24 / 31) as Col1,
1.0 * @DaysRemaining / @DaysinMonth as col2,
10 / 2 as WorkingExample
Или используйте явное преобразование типов данных:
declare @DaysinMonth int = DAY(EOMONTH(GETDATE())) -- 31
declare @DaysRemaining int = @DaysinMonth - DAY(GETDATE()) -- 24
SELECT
(DAY(EOMONTH(GETDATE())) - DAY(GETDATE())) as DaysRemaining,
@DaysinMonth as DaysinMonth,
@DaysRemaining as DaysRemaining2,
CONVERT(decimal, 24) / 31 as Col1,
CONVERT(decimal, @DaysRemaining) / @DaysinMonth as col2,
10 / 2 as WorkingExample
Вывод:
DaysRemaining DaysinMonth DaysRemaining2 Col1 col2 WorkingExample
24 31 24 0.774193 0.77419354838 5