Link to home
Start Free TrialLog in
Avatar of James Murphy
James MurphyFlag for Australia

asked on

2 dates in a SQL stored proc - 7 days prior and 30 days in future

Hi,

I have a new for 2 dates in my SQL stored procedure.  
1) 7 Days prior to today
2) 30 days in the future from today.

I am using these, but they don't seem to be working:
      DECLARE @7daysago DATE = CONVERT(DATE, DATEADD(DAY, -DAY(GETDATE()) -7, DATEADD(MONTH, 1, GETDATE())));
      DECLARE @30daysinfuture DATE = CONVERT(DATE, DATEADD(DAY, -DAY(GETDATE()) +30, DATEADD(MONTH, 1, GETDATE())));

Could anyone please point me in the right direction?

cheers
ASKER CERTIFIED SOLUTION
Avatar of slightwv (䄆 Netminder)
slightwv (䄆 Netminder)

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of James Murphy

ASKER

that is perfect.  Many thanks!
Avatar of slightwv (䄆 Netminder)
slightwv (䄆 Netminder)

Glad to help.

If you want a slightly different way that is probably more mainstream:
select getdate() as today, dateadd(day,-7,getdate()) as seven_days_ago, dateadd(day,30,getdate()) as thirty_days_from_now
be careful using getdate() because it is actually the current date AND time, you can use cast(getdate() as date) to set the time to 00:00:00

select
  cast(getdate() as date) as today
, cast(getdate() as date) -7  as seven_days_ago
, cast(getdate() as date) +30 as thirty_days_from_now

Using integers for addition isn't common in TSQL coding, instead  using dateadd() is more common, i.e.

select
  cast(getdate() as date) as today
, dateadd(day,-7,cast(getdate() as date) ) as seven_days_ago
, dateadd(day,30,cast(getdate() as date) ) as thirty_days_from_now

These will also work:

 CONVERT(DATE, DATEADD(DAY, -7, GETDATE()))
 CONVERT(DATE, DATEADD(DAY, +30, GETDATE()))

[edit]
looking back at your originals it seems that you felt it necessary to alter the day and the month - individually - when using DATEADD(). Hopefully you can see that this isn't needed, dateadd() will accurately add or deduct the number of time units from a parameter datetime value.

If in doubt on how to use a function, books online will help: e.g.
https://docs.microsoft.com/en-us/sql/t-sql/functions/dateadd-transact-sql?view=sql-server-2017