Solved

How do I query a date range from beginning to end of the previous month in YYYYMMDD format?

Posted on 2011-03-17
5
629 Views
Last Modified: 2012-05-11
I currently have a large amount of SQL queries built for the purpose of Month End reporting.  A common factor in these queries is retrieving total counts in tables between the first and last days of the previous month.  The field in question is BookDate, which is formatted as YYYYMMDD.  

Example:
Say today is March 1st, 2011 (20110301) and I want a total count of transactions in the ActivityHist table that are cash from February 1st, 2011 (20110201) through February 28th (20110228)... (See Attached Code)

Currently, I manually change all BookDate info to reflect the previous month... How can I do this automatically?

Regards,

NCollinsBBP


SELECT COUNT(*)
FROM ActivityHist
WHERE CashTran = '1' AND
      BookDate >= '20110201' AND BookDate <= '20110228'

Open in new window

0
Comment
Question by:NCollinsBBP
[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
  • 2
  • 2
5 Comments
 
LVL 18

Expert Comment

by:lludden
ID: 35158524
To get the first and last day of the previous month,

SELECT DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) AS LastDayPrevMonth,
      CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(GETDATE())-1),CAST(GETDATE() as date)),101) AS FirstDayPrevMonth
0
 
LVL 18

Expert Comment

by:lludden
ID: 35158570
If you need this formatted as a string, then use CONVERT to change to YYYYMMDD format,

SELECT CAST(varchar(8),getdate(),112)

0
 

Author Comment

by:NCollinsBBP
ID: 35159056
If you don't mind, how exactly can I incorporate that into the query I attached?  The BookDate field in my database is plain text and not a datetime field....
0
 
LVL 23

Accepted Solution

by:
wdosanjos earned 250 total points
ID: 35159420
Try:

SELECT COUNT(*)
FROM ActivityHist
WHERE CashTran = '1' AND
      left(BookDate,6) = left(convert(varchar(8),dateadd(mm,-1,getdate()),112),6)

Open in new window


I hope this helps.
0
 

Author Closing Comment

by:NCollinsBBP
ID: 35159503
Perfection!
This solution gave me the same exact result as my attached query from my original post.
0

Featured Post

Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

Question has a verified solution.

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

The Delta outage: 650 cancelled flights, more than 1200 delayed flights, thousands of frustrated customers, tens of millions of dollars in damages – plus untold reputational damage to one of the world’s most trusted airlines. All due to a catastroph…
I have a large data set and a SSIS package. How can I load this file in multi threading?
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

726 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