Po dodaniu miesiąca porównaj DAY. Jeśli mniej, ponieważ DATEADD idzie do końca miesiąca (np. 31 stycznia do 28 lutego), przejdź do następnego miesiąca
Pole DATEADD/DATEDIFF przeskakuje na początek następnego miesiąca
declare @StartEffectiveDate datetime
set @StartEffectiveDate = '2011-01-20'
SELECT
CASE
WHEN DAY(@StartEffectiveDate) <= DAY(DATEADD (MONTH, 1, @StartEffectiveDate)) THEN DATEADD (MONTH, 1, @StartEffectiveDate)
ELSE DATEADD(day, 1, DATEADD (MONTH, 1, @StartEffectiveDate))
END
set @StartEffectiveDate = '2011-01-31'
SELECT
CASE
WHEN DAY(@StartEffectiveDate) <= DAY(DATEADD (MONTH, 1, @StartEffectiveDate)) THEN DATEADD (MONTH, 1, @StartEffectiveDate)
ELSE DATEADD(day, 1, DATEADD (MONTH, 1, @StartEffectiveDate))
END
set @StartEffectiveDate = '2011-02-28'
SELECT
CASE
WHEN DAY(@StartEffectiveDate) <= DAY(DATEADD (MONTH, 1, @StartEffectiveDate)) THEN DATEADD (MONTH, 1, @StartEffectiveDate)
ELSE DATEADD(day, 1, DATEADD (MONTH, 1, @StartEffectiveDate))
END
Edytuj:wystarczy dodać dodatkowy dzień, a nie kilka fantazyjnych DATEADD/DATEDIFF...