declare @date datetime
select @date = '03/03/2011'
select @date, 
           cast(   cast(((DATEPART(QUARTER, @date)- 1) *3) + 1 as CHAR(2))
                     + '/01/' 
                     + cast(DATEPART(year, @date) as CHAR(4))
           as datetime)
-----
2011-03-03 00:00:00.000    2011-01-01 00:00:00.000
As a demonstration, we can wrap that call in a loop and display the results of the formula for a full year.
declare @date datetime
select @date = '01/01/2011'
while @date <= '01/01/2012'
begin
select @date, 
           cast(   cast(((DATEPART(QUARTER, @date)- 1) *3) + 1 as CHAR(2))
                     + '/01/' 
                     + cast(DATEPART(year, @date) as CHAR(4))
           as datetime)
select @date = DATEADD(month, 1, @date)
end
Or, we may the first date of the next quarter, so April 1 2011.  This is easy, just add 3 months:
declare @date datetime
select @date = '03/03/2011'
select @date, 
     DATEADD(month, 3, 
           cast(   cast(((DATEPART(QUARTER, @date)- 1) *3) + 1 as CHAR(2))
                     + '/01/' 
                     + cast(DATEPART(year, @date) as CHAR(4))
           as datetime)
     )
-----
2011-03-03 00:00:00.000    2011-04-01 00:00:00.000
One final note: when doing date calculations like this in a report, where you don’t care about time, in SQL 2008 you can use the date datatype for your variables and casts instead of datetime.  It makes for a cleaner, more compact script and reduces the need for all those zeroes.
-----
2011-03-03 2011-04-01
No comments:
Post a Comment
All comments are moderated before publishing. If you find something wrong or disagree, please comment so that this blog can be as accurate and helpful as possible.