?
Solved

Last Sat of the Previous month

Posted on 2007-11-20
7
Medium Priority
?
341 Views
Last Modified: 2012-08-14
Hello,

How can I calculate the last Saturday of the previous month?


Thanks !
0
Comment
Question by:sbagireddi
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
7 Comments
 
LVL 25

Expert Comment

by:imitchie
ID: 20324734
declare @YOUR_DATE datetime
set @YOUR_DATE=CONVERT(datetime, '2003/07/01')
select DATEADD(d, (CASE WHEN DATEPART(dw, @YOUR_DATE)>=6 THEN 6-DATEPART(dw, @YOUR_DATE) ELSE -DATEPART(dw, @YOUR_DATE) END), @YOUR_DATE)
0
 
LVL 19

Expert Comment

by:frankytee
ID: 20324775
declare @dtX as smalldatetime
set @dtx = getdate() -(day(getdate()))
select case DATEPART ( dw , @dtx )
      when 6 then @dtx
      else @dtx - DATEPART( dw , @dtx )
           end as 'LastSaturday'
0
 
LVL 8

Author Comment

by:sbagireddi
ID: 20324779
Hi,

When I substitute the @YOUR_DATE with getdate( ) it gives the last Sat ie. 11/17/2007.
I would like to know the last Sat of the previous month i.e Oct, it would be 10/27/2007.
 
Let me explain the context:
I am recursing through a directory and want to know all the log backups in the directory from the last Sat of the previous month (when the last full backup completes) to the first day of the current month.

Thanks a ton!

0
Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

 
LVL 19

Accepted Solution

by:
frankytee earned 1000 total points
ID: 20324784
if you want to get remove the time component:
declare @dtX as smalldatetime
--last day of last month
set @dtx = cast(floor(cast((getdate() -(day(getdate()))) as int)) as smalldatetime)
--now last saturday
select
   case DATEPART ( dw , @dtx )
       when 6 then @dtx
        else @dtx - DATEPART( dw , @dtx )
   end as 'LastSaturdayOfPreviousMonth'
0
 
LVL 25

Assisted Solution

by:imitchie
imitchie earned 1000 total points
ID: 20324836
sorry, fixed

select dateadd(d, -
 isnull(nullif(
 datepart(dw, dateadd(m, month(@your_date)-1, dateadd(yy, year(@your_date) - 1900, 0))-1),7),0),
 dateadd(m, month(@your_date)-1, dateadd(yy, year(@your_date) - 1900, 0))-1)

Open in new window

0
 
LVL 25

Expert Comment

by:imitchie
ID: 20324853
this part is repeated:
dateadd(m, month(@your_date)-1, dateadd(yy, year(@your_date) - 1900, 0))-1,
which essentially is one of 100 ways to get "last day of last month"

if the day of week is not 7 (Sat), we need to make it 7, we do this by simply taking the day of week off! i.e. Wed is 4, so we take 4 days off to make .. Sat.  The trick is that IF it is already Sat, we take none off, hence isnull(nullif(@x, 7), 0) so that 7 becomes 0.

depends on @@datefirst being 1 for Sunday (pretty much all English dbs)
0
 
LVL 19

Expert Comment

by:frankytee
ID: 20324958
typo in mine, it should have been 7 instead of a 6.
declare @dtX as smalldatetime
set @dtx = getdate() -(day(getdate()))
select
 case DATEPART ( dw , @dtx )
   when 7 then @dtx
   else @dtx - DATEPART( dw , @dtx )
 end as 'LastSaturdayOfPreviousMonth'
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
In the first part of this tutorial we will cover the prerequisites for installing SQL Server vNext on Linux.
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.
Via a live example, show how to backup a database, simulate a failure backup the tail of the database transaction log and perform the restore.
Suggested Courses

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question