select * from ( select b.name, convert(datetime, dateadd(day, 1-day(b.date), b.date), 20) as dt1, convert(datetime, dateadd(month, 1, dateadd(day, 1-day(b.date),b.date)) - 1, 20) as dt2 from battles b ) tt ---- Guadalcanal 1942-11-01 00:00:00.000 1942-11-30 00:00:00.000 North Atlantic 1941-05-01 00:00:00.000 1941-05-31 00:00:00.000 North Cape 1943-12-01 00:00:00.000 1943-12-31 00:00:00.000 Surigao Strait 1944-10-01 00:00:00.000 1944-10-31 00:00:00.000 --------- select tt.name, left(tt.dt1, charindex(' ', tt.dt1)) from ( select b.name, convert(datetime, dateadd(day, 1-day(b.date), b.date), 20) as dt1, convert(datetime, dateadd(month, 1, dateadd(day, 1-day(b.date),b.date)) - 1, 20) as dt2 from battles b ) tt ---- Guadalcanal Nov North Atlantic May North Cape Dec Surigao Strait Oct