Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a dynamic date range in SQL

How can I construct a SQL statement that will always return a start date of July 1 of the previous year, and an end date of June 30 of the current year based on GETDATE()? Right now I have

    Dateadd(yy, Datediff(yy,1,GETDATE())-1,0) AS StartDate,
DateAdd(dd,-1,Dateadd(yy, Datediff(yy,0,GETDATE()),0)) AS EndDate

which will return January 1, 2012 and December 31, 2013 respectively..

like image 754
FrozenYeti Avatar asked Jun 07 '26 11:06

FrozenYeti


2 Answers

You could just add another DATEADD() to your current script:

SELECT DATEADD(month,6,DATEADD(yy, DATEDIFF(yy,1,GETDATE())-1,0)) AS StartDate
      ,DATEADD(month,6,DATEADD(dd,-1,DATEADD(yy, DATEDIFF(yy,0,GETDATE()),0))) AS EndDate
like image 195
Hart CO Avatar answered Jun 10 '26 04:06

Hart CO


This seems like an odd request. One way of doing it is by constructing date strings and parsing them:

select cast(cast(year(GETDATE()) - 1 as varchar(255))+'-07-01' as DATE) as StartDate,
       cast(cast(year(GETDATE()) as varchar(255))+'-06-30' as DATE) as EndDate

This constructs the strings in the format '2013-06-30', which will be interpreted correctly on for most SQL Server date settings.

I believe (recalling something Aaron Bertrand wrote) that leaving out the hyphens always works:

select cast(cast(year(GETDATE()) - 1 as varchar(255))+'0701' as DATE) as StartDate,
       cast(cast(year(GETDATE()) as varchar(255))+'0630' as DATE) as EndDate

I, as a human, just much prefer having the hyphens.

like image 23
Gordon Linoff Avatar answered Jun 10 '26 03:06

Gordon Linoff



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!