From: Allen on
5th business day. This is goofy but I needed something that didn't use loops (for a user friendly system called ARGOS that just uses stock SQL) and I didn't want to add a function.

So I run the report every day and add this to the where statement. Sorry about the formatting (from cut paste). If you don't get it, make up a dummy calendar with example months starting the 1st on each successive day. Then mark when the 5th business day is... you'll see the pattern. Do the same for July/Sept where the date nearest the 4th is off for July the 1st Monday of the month for Sept.

WHERE
'Y' =
CASE WHEN TRIM (TO_CHAR (SYSDATE, 'MONTH')) NOT IN ('JULY', 'SEPTEMBER')
AND ( (TRIM (TO_CHAR (SYSDATE, 'DAY')) IN ('FRIDAY')
AND TO_CHAR (SYSDATE, 'dd') IN ('05', '06', '07')
OR (TRIM (TO_CHAR (SYSDATE, 'DAY')) IN
('MONDAY',
'TUESDAY',
'WEDNESDAY',
'THURSDAY',
'FRIDAY')
AND TO_CHAR (SYSDATE, 'dd') IN ('07'))))
THEN
'Y'
WHEN (TRIM (TO_CHAR (SYSDATE, 'MONTH')) IN ('JULY', 'SEPTEMBER')
AND ( (TRIM (TO_CHAR (SYSDATE, 'DAY')) = 'MONDAY'
AND TO_CHAR (SYSDATE, 'dd') IN ('08', '09', '10'))
OR (TRIM (TO_CHAR (SYSDATE, 'DAY')) IN
('MONDAY',
'TUESDAY',
'WEDNESDAY',
'THURSDAY',
'FRIDAY')
AND TO_CHAR (SYSDATE, 'dd') IN ('08'))))
THEN
'Y'
ELSE
'N'
END



Terri wrote:

5th business day of the month
07-Sep-07

I have a calendar table but need the logic to determine if it is the 5th
business of the month. I want to set @FifthBusinessDay to either Y or N.

Can someone help?

DECLARE @CurrentDate datetime
DECLARE @FifthBusinessDay char(1)


CREATE TABLE #Calendar (
CalDate datetime NOT NULL ,
BusinessDay char (1)
)

INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('8/28/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('8/29/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('8/30/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('8/31/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/1/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/2/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/3/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/4/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/5/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/6/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/7/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/8/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/9/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/10/2007','Y')

SELECT * FROM #Calendar

SET @CurrentDate = getdate()


DROP TABLE #Calendar

Previous Posts In This Thread:

On Friday, September 07, 2007 11:31 AM
Terri wrote:

5th business day of the month
I have a calendar table but need the logic to determine if it is the 5th
business of the month. I want to set @FifthBusinessDay to either Y or N.

Can someone help?

DECLARE @CurrentDate datetime
DECLARE @FifthBusinessDay char(1)


CREATE TABLE #Calendar (
CalDate datetime NOT NULL ,
BusinessDay char (1)
)

INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('8/28/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('8/29/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('8/30/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('8/31/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/1/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/2/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/3/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/4/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/5/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/6/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/7/2007','Y')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/8/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/9/2007','N')
INSERT INTO #Calendar (CalDate,BusinessDay) VALUES ('9/10/2007','Y')

SELECT * FROM #Calendar

SET @CurrentDate = getdate()


DROP TABLE #Calendar

On Friday, September 07, 2007 12:04 PM
Scott Morris wrote:

Re: 5th business day of the month
"Terri" <terri(a)cybernets.com> wrote in message
news:fbrqsj$6lf$1(a)reader2.nmix.net...

Logically, the fifth business date is the last row (by date) of the first 5
business dates of the month. Translating into pseudo-sql:
select top 1 from (select top 5 order by ... asc) order by ... desc

That should be enough to get you started.

On Friday, September 07, 2007 12:13 PM
Roy Harvey wrote:

IF (SELECT COUNT(*) FROM #Calendar as A WHERE A.
IF (SELECT COUNT(*)
FROM #Calendar as A
WHERE A.CalDate <= @CurrentDate
AND A.CalDate >= DATEADD(day, 1 +
DATEDIFF(day,0,@CurrentDate) -
DATEPART(day,@CurrentDate),
0)
AND BusinessDay = 'Y') = 5
SET @FifthBusinessDay = 'Y'
ELSE
SET @FifthBusinessDay = 'N'

Roy Harvey
Beacon Falls, CT

On Fri, 7 Sep 2007 09:31:31 -0600, "Terri" <terri(a)cybernets.com>
wrote:

On Friday, September 07, 2007 3:53 PM
Terri wrote:

Thanks Roy!
Thanks Roy!

On Friday, September 07, 2007 9:44 PM
--CELKO-- wrote:

Wrong approach; do not use BOOLEAN flags in SQL.
Wrong approach; do not use BOOLEAN flags in SQL. Instead Julianize
the business days within the Calendar (which should be a permanent
table). Find the Julian number for the first of the month; add 5 and
report the minimum date. Goolg ethis group for more details.

On Friday, March 19, 2010 4:58 PM
Allen Whipps wrote:

5th business day with stock SQL/no function/no loops.
5th business day. This is goofy but I needed something that didn't use loops (for a user friendly system called ARGOS that just uses stock SQL) and I didn't want to add a function.

So I run the report every day and add this to the where statement. Sorry about the formatting (from cut paste). If you don't get it, make up a dummy calendar with example months starting the 1st on each successive day. Then mark when the 5th business day is... you'll see the pattern. Do the same for July/Sept where the date nearest the 4th is off for July the 1st Monday of the month for Sept.

WHERE
'Y' =
CASE WHEN TRIM (TO_CHAR (SYSDATE, 'MONTH')) NOT IN ('JULY', 'SEPTEMBER')
AND ( (TRIM (TO_CHAR (SYSDATE, 'DAY')) IN ('FRIDAY')
AND TO_CHAR (SYSDATE, 'dd') IN ('05', '06', '07')
OR (TRIM (TO_CHAR (SYSDATE, 'DAY')) IN
('MONDAY',
'TUESDAY',
'WEDNESDAY',
'THURSDAY',
'FRIDAY')
AND TO_CHAR (SYSDATE, 'dd') IN ('07'))))
THEN
'Y'
WHEN (TRIM (TO_CHAR (SYSDATE, 'MONTH')) IN ('JULY', 'SEPTEMBER')
AND ( (TRIM (TO_CHAR (SYSDATE, 'DAY')) = 'MONDAY'
AND TO_CHAR (SYSDATE, 'dd') IN ('08', '09', '10'))
OR (TRIM (TO_CHAR (SYSDATE, 'DAY')) IN
('MONDAY',
'TUESDAY',
'WEDNESDAY',
'THURSDAY',
'FRIDAY')
AND TO_CHAR (SYSDATE, 'dd') IN ('08'))))
THEN
'Y'
ELSE
'N'
END


Submitted via EggHeadCafe - Software Developer Portal of Choice
WPF Circular Progress Indicator
http://www.eggheadcafe.com/tutorials/aspnet/4d89b4cb-ba59-4362-ab0a-cc047643fd42/wpf-circular-progress-ind.aspx