select
ST = convert(varchar(10),ST,121),
DT = convert(varchar(10),DT,121),
DAYS_THIS_MONTH =
case
-- Compare to last day of month
when DT > dateadd(mm,datediff(mm,-1,getdate()),-1)
-- Difference between start date and last day of month
then datediff(dd,ST,dateadd(mm,datediff(mm,-1,getdate()),-1))
-- Difference between start date and last date
else datediff(dd,ST,DT)
end
from
(select ST = convert(datetime,'2006-06-10') )b
cross join
(
Select DT = convert(datetime,'2006-06-27') union all
Select DT = convert(datetime,'2006-07-27')
) a
Results:
ST DT DAYS_THIS_MONTH
---------- ---------- ---------------
2006-06-10 2006-06-27 17
2006-06-10 2006-07-27 20
(2 row(s) affected)
CODO ERGO SUM