-- Some alternative date arithmetic
SELECT
o.Forecasted_Commencement_Renewal_Date__c,
CAST(RTRIM(CAST(MONTH(DATEADD(mm, 1, o.Forecasted_Commencement_Renewal_Date__c)) AS CHAR(2))) + '/01/' + CAST(YEAR(o.Forecasted_Commencement_Renewal_Date__c) AS CHAR(4)) AS DATETIME),
DATEADD(MONTH,DATEDIFF(MONTH,0,Forecasted_Commencement_Renewal_Date__c)+1,0),
CAST((CAST(YEAR(GETDATE()) AS CHAR(4)) + CASE WHEN LEN(CAST(MONTH(GETDATE()) AS CHAR(2))) < 2 THEN '-0' + CAST(MONTH(GETDATE()) AS CHAR(1)) ELSE '-' + CAST(MONTH(GETDATE()) AS CHAR(2)) END + '-01') AS SMALLDATETIME) AS SnapShotPeriod,
CAST(DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0) AS SMALLDATETIME)
FROM (SELECT Forecasted_Commencement_Renewal_Date__c = GETDATE()) o
-- here's how it works
SELECT DATEDIFF(MONTH,0,GETDATE()) -- 1374
SELECT DATEADD(MONTH,1374+1,0) -- 2014-08-01 00:00:00.000
SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0) -- 2014-08-01 00:00:00.000
SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0) -- 2014-07-01 00:00:00.000
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden