declare
@input datetime
,@FirstDayThisMonth datetime
,@LastDayThisMonth datetime
select
@input = '1/12/2009'
,@FirstDayThisMonth = dateadd(day, 1-day(@input), @input)
,@LastDayThisMonth = dateadd(day, 0-day(@input), dateadd(month, 1, @input))
;
with a as (
select 0 as n
union select 1
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 10
union select 11
union select 12
union select 13
union select 14
union select 15
union select 16
union select 17
union select 18
union select 19
union select 20
union select 21
union select 22
union select 23
union select 24
union select 25
union select 26
union select 27
union select 28
union select 29
union select 30
union select 31
)
,b as (
select
result = dateadd(d, a.n, @FirstDayThisMonth)
from
a
)
select
result
from
b
where
result between @FirstDayThisMonth and @LastDayThisMonth