Get Business days ONLY excluding Thanks giving / Christmas etc
I know how to exclude Saturday and Sunday to get weekdays only but how to get business days only excluding thanks giving/ Christmas/memorial day etc (based on the locale or some other setting) ?
(If it is country- INDIA - the list of official government holidays changes, so the query should work properly depending on the country or some other setting.)
Hello userPrasad.
Business or working days can not only be affected regionally but also by the nature of the industry that the system is used for; not to mention that change can occur. The few systems that I've worked with have typically provided a user-maintained listing of dates to be considered as business/working days. Obviously, this would contain more data than the system and your coding would actually require, but this is normally the most straightforward presentation to the business user.
Make it simple
Make it obvious
Make it usable
Make it flexible
Some food for thought,
Luke
Please mark the answer as helpful or answered if it is so. If not, provide additional details.
Always try to provide create table and insert table statements to help the forum members help you better.
Similar Messages
-
Is there a function to derive "business days" only
Is there either an Oracle SQL built-in function or user-defined function for calculating the difference
between two dates or between SYSDATE and a date in the database, which uses business days
only (at least excluding weekends)?
I'd appreciate any help on this!
Thanks!
Kathy Kuehnle
[ [email protected] ]We solved this with the following package:
create or replace
package body zentr_date_functions as
function eastern (p_year in number) return date is
-- Calculate easter sunday (valid from 1900 to 2099)
-- based on a Gauss algorithm
l_a pls_integer;
l_b pls_integer;
l_c pls_integer;
l_d pls_integer;
l_e pls_integer;
l_p pls_integer;
function make_date(p_d in pls_integer, p_m in pls_integer, p_y in pls_integer) return date is
begin
return to_date(to_char(p_d, '00')||to_char(p_m, '00')||to_char(p_y, '0000'), 'DDMMYYYY');
end;
begin
if p_year not between 1900 and 2099 then
return null;
end if;
l_a := mod(p_year, 19);
l_b := mod(p_year, 4);
l_c := mod(p_year, 7);
l_d := mod(19 * l_a + 24, 30);
l_e := mod(2 * l_b + 4 * l_c + 6 * l_d + 5, 7);
l_p := 22 + l_d + l_e;
if l_p > 31 then
if l_p = 56 and l_d = 28 and l_a > 10 then
return make_date(18, 4, p_year);
elsif l_p = 57 then
return make_date(19, 4, p_year);
else
return make_date(l_p - 31, 4, p_year);
end if;
else
return make_date(l_p, 3, p_year);
end if;
end eastern;
function is_workday (p_date in date) return number as
-- Is p_date a working day?
l_eastern date;
begin
if to_char(p_date, 'DY', 'NLS_DATE_LANGUAGE = AMERICAN') in ('SAT', 'SUN') then
return 0;
end if;
if to_char(p_date, 'DDMM') in ('0101', '0105', '0310', '2412', '2512', '2612', '3112') then
return 0; -- fixed bank holidays in lower saxony, Germany
end if;
if to_number(to_char(p_date, 'MM')) not between 3 and 6 then
return 1;
end if;
if to_number(to_char(p_date, 'YYYY')) not between 1900 and 2099 then
return null;
end if;
l_eastern := eastern (to_number(to_char(p_date, 'YYYY')));
if trunc(p_date) in (l_eastern - 2, l_eastern + 1, l_eastern + 39, l_eastern + 50) then
return 0; -- eastern depentent bank holidays in lower saxony, Germany
end if;
return 1;
end is_workday;
-- This is what you are looking for:
function workdays_between (p_date1 in date, p_date2 in date) return number as
-- count number of workdays between p_date1 and p_date2 (both p_date1 and p_date2 included).
l_count pls_integer := 0;
begin
for i in 0 .. p_date2 - p_date1 loop
l_count := l_count + is_workday(p_date1 + i);
end loop;
return l_count;
end workdays_between;
end; -
Data between Date Range with Business Days only
Hi All,
We have a requirement that we need to retrieve data between a data range, providing From date and To date as input.
We also have the option to Include Business Days Only through a check box which will be passed to CR 2008 through a report frame work.
Can some one help me how to display the report data within the Date Range entered and that includes only Business Days.
Thanks in advance for the help.
Regards,
Naresh.try this formula. Lets if your date range parameter is {?date} then try this formula
@startdate:
if datepart('w',minimum({?date}))=7 then
minimum({?date})+2
else if datepart('w',minimum({?date}))=1 then
minimum({?date})+1
else
minimum({?date})
@enddate
if datepart('w',maximum({?date}))=7 then
maximum({?date})+2
else if datepart('w',maximum({?date}))=1 then
maximum({?date})+1
else
maximum({?date})
regards,
Raghavendra -
hi
version oracle 10g
Function should accept start date and business_days_to_add and it should return date.
to a given date i want to add business_days(business days are all days except SAT SUN)
lets say i want to add 4 business days to sysdate then function should return date as 09/16/2010thanksOne way of doing it:
CREATE OR REPLACE FUNCTION add_business_days(p_date IN DATE, p_bus_days IN NUMBER) RETURN DATE DETERMINISTIC IS
v_return DATE;
BEGIN
WITH t AS
(SELECT rownum rn, trunc(p_date) + decode(sign(p_bus_days), 1, LEVEL - 1, -1, (LEVEL * -1) + 1, 0) theday
FROM dual
WHERE to_char(p_date + decode(sign(p_bus_days), 1, LEVEL - 1
,-1, (LEVEL * -1) + 1
, 0), 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('SAT', 'SUN')
OR ROWNUM = 1
CONNECT BY rownum <= abs(p_bus_days) + 1)
SELECT theday
INTO v_return
FROM t
WHERE rn = abs(p_bus_days) + 1;
RETURN v_return;
END;Sample execution:
SQL> CREATE OR REPLACE FUNCTION add_business_days(p_date IN DATE, p_bus_days IN NUMBER) RETURN DATE DETERMINISTIC IS
2 v_return DATE;
3 BEGIN
4 WITH t AS
5 (SELECT rownum rn, trunc(p_date) + decode(sign(p_bus_days), 1, LEVEL - 1, -1, (LEVEL * -1) + 1, 0) theday
6 FROM dual
7 WHERE to_char(p_date + decode(sign(p_bus_days), 1, LEVEL - 1
8 ,-1, (LEVEL * -1) + 1
9 , 0), 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('SAT', 'SUN')
10 OR ROWNUM = 1
11 CONNECT BY rownum <= abs(p_bus_days) + 1)
12 SELECT theday
13 INTO v_return
14 FROM t
15 WHERE rn = abs(p_bus_days) + 1;
16 RETURN v_return;
17 END;
18 /
Function created
SQL> select add_business_days(sysdate, 5) from dual;
ADD_BUSINESS_DAYS(SYSDATE,5)
17/9/2010
SQL> select add_business_days(sysdate, -55) from dual;
ADD_BUSINESS_DAYS(SYSDATE,-55)
25/6/2010
SQL> select add_business_days(sysdate+1, 1) from dual;
ADD_BUSINESS_DAYS(SYSDATE+1,1)
13/9/2010
SQL> select add_business_days(sysdate+1, -1) from dual;
ADD_BUSINESS_DAYS(SYSDATE+1,-1
10/9/2010
SQL> Edited by: fsitja on Sep 10, 2010 12:49 PM Fixed to take into account negative numbers. -
Fucntion to Calculate business days (exclude weekends & holidays) between two days
Hello,
I need to be able to calculate business days between two dates excluding weekends and holidays. I do have a date dimension and also flags which denote weekday, holiday. Would really appreciate help in building a udf for the business days calculation.
Thanks,Hi, Please take a look and tweak accordingly. Best of luck.
--Assuming data dimension table something like the following
--tblDateDim (DT date primary key,
flagHoliday bit,
flagWeekday bit
CREATE FUNCTION fnBusinessDays (
@StartDate DATE,
@EndDate DATE
RETURNS INT
AS
BEGIN
DECLARE @Days INT ;
SELECT @Days = count(*)
FROM tblDateDim --// date dimension
WHERE
( DT BETWEEN @StartDate AND @EndDate) --// dt is date column in the table.
AND --// also flags which denote weekday, holiday
flagHoliday = 0 --// flagHoliday= 1--Holiday;= 0 --workingday/businessday
AND
flagWeekday = 1 --// FlagWeekday = 1--businessday ; =0 --weekend (Saturday and Sunday)
RETURN (@Days)
END
GO -
Service Requests-Business days when year changes
Hi All,
I am trying to calculate for how long a SR has been open in business days only.
I have successfully used Mike Lairson's formula for the last 9 months but it seems it cannot cope with year changes. If the begin data is in 2009 and the end date in 2010, the results are not correct anymore.
E.G. For an SR that was opened on 12/30/2009 and closed on 01/05/2010 should return 5 business days but it is actually returning 110.
The syntax that I used so far is:
(CASE
/* Convert Sunday to the Business Day Of the Year */
WHEN DAYOFWEEK("Service Request"."Closed Date and Time") = 1
THEN (DAYOFYEAR("Service Request"."Closed Date and Time") - WEEK("Service Request"."Closed Date and Time")) -
(WEEK("Service Request"."Closed Date and Time") - 2)
/* Convert Saturday to the Business Day Of the Year */
WHEN DAYOFWEEK("Service Request"."Closed Date and Time") = 7
THEN (DAYOFYEAR("Service Request"."Closed Date and Time") - WEEK("Service Request"."Closed Date and Time")) -
(WEEK("Service Request"."Closed Date and Time") - 1)
/* Convert Mon-Fri to the Business Day Of the Year */
ELSE (DAYOFYEAR("Service Request"."Closed Date and Time") -
WEEK("Service Request"."Closed Date and Time")) +
(2 - WEEK("Service Request"."Closed Date and Time")) END)
(CASE
/* Convert Sunday to the Business Day Of the Year */
WHEN DAYOFWEEK("Service Request"."Opened Date") = 1
THEN (DAYOFYEAR("Service Request"."Opened Date") -
WEEK("Service Request"."Opened Date")) -
(WEEK("Service Request"."Opened Date") - 2)
/* Convert Saturday to the Business Day Of the Year */
WHEN DAYOFWEEK("Service Request"."Opened Date") = 7
THEN (DAYOFYEAR("Service Request"."Opened Date") -
WEEK("Service Request"."Opened Date")) -
(WEEK("Service Request"."Opened Date") - 1)
/* Convert Mon-Fri to the Business Day Of the Year */
ELSE (DAYOFYEAR("Service Request"."Opened Date") -
WEEK("Service Request"."Opened Date")) +
(2 - WEEK("Service Request"."Opened Date"))
END)
+
/* Adjust for Year Change */
(365 * (YEAR("Service Request"."Closed Date and Time") -
YEAR("Service Request"."Opened Date")))
Any ideea or hint would be highly appreciated.
Thank you.
Regards,
Dorin
Edited by: user805960 on 06.01.2010 07:07Hi,
i used this formula to find out the days it calculates between 31/12/2009 and 01/01/2010, the result it gave was 106 days.
So i subtracted 106 from 365 days (365-106=259)in the formula, the formula is now giving the correct values.
I think we have to add the total working days and not the no.of days in a year.
Please can you all reconfirm the results.
Thanks
Neena
Edited by: NNK on Jan 11, 2010 3:16 PM -
How to backup ONCE per DAY only
Hi
It takes forever (2hrs+) to backup 300GB onto our Time Capsule, and the backup slows down my computer so much to the point I want to pull my hair out! I can't seem to find a way to do an automatic backup once per day only rather than hourly without turning off the automatic backup and doing it manually.
Does anyone know how to do an automatic backup to Time Capsule once per day only?
Thank you!Thank you for your assistance!
That is exactly what I was looking for, and am very relieved to know there is something available!!
I was hesitant to download it at first because since it is backing up all my files, I was afraid of the possibility of having a built in bug that would allow an outsider to access my files. However, I researched it, and it seems there are many happy & satisfied users of the Time Machine Editor software.
Thanks again! Hopefully Apple will just swallow their pride and make this ability available in one of their own software updates in the future. -
Recursive CTE to get first business day excluding public holidays
I wanted to write a recursive CTE to calculate the first business day excluding the public holidays for a given year. I have a table with the public holiday for that same year
I like the functions I built to get this done:
create function NthDayOfMonth (@year int, @month smallint, @weekday varchar(15), @nth smallint)
returns datetime
as
begin
declare @the_date datetime, @c_date datetime, @cth smallint
set @cth = 0
set @c_date = convert(varchar,@year)+'-'+convert(varchar,@month)+'-01'
while month(@c_date) = @month
begin
if datename(weekday,@c_date) = @weekday set @cth = @cth + 1
if @cth = @nth and datename(weekday,@c_date) = @weekday set @the_date = @c_date
set @c_date = dateadd(day,1,@c_date)
end
return @the_date
end
GO
create function Holidays(@year int)
returns @table table
date date,
type varchar(10),
name varchar(25)
as
begin
insert into @table
select convert(datetime,convert(varchar,@year)+'-01-01') as date,'Holiday' as type ,'New Years Day' as name UNION ALL
select dbo.NthDayOfMonth(@year,2, 'Monday',3),'Holiday','Family Day' UNION ALL
select dateadd(d,0-case when datepart(weekday,convert(varchar,@year)+'-05-25') in (1,2) then 5+datepart(weekday,convert(varchar,@year)+'-05-25') else datepart(weekday,convert(varchar,@year)+'-05-25')-1 end, convert(varchar,@year)+'-05-25') ,'Holiday','Victoria Day' UNION ALL
select convert(varchar,@year)+'-07-01' ,'Holiday','Canada Day' UNION ALL
select dbo.NthDayOfMonth(@year,8, 'Monday',1),'Holiday','Civic Holiday' UNION ALL
select dbo.NthDayOfMonth(@year,9, 'Monday',1),'Holiday','Labour Day' UNION ALL
select dbo.NthDayofMonth(@year,10,'Monday',2),'Holiday','Thanksgiving' UNION ALL
select convert(varchar,@year)+'-11-11' ,'Holiday','Rememberance Day'UNION ALL
select convert(varchar,@year)+'-12-25' ,'Holiday','Christmas Day' UNION ALL
select convert(varchar,@year)+'-12-26' ,'Holiday','Boxing Day' UNION ALL
SELECT CONVERT(DATE,CONVERT(VARCHAR,@year) + '-0'+CONVERT(VARCHAR, FLOOR((((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) - (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) + ((((2 * FLOOR((@year / 100.0)) % 4) + (2*((@year % 100) / 4))) - ((@year % 100) % 4) - ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) + (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) +32) % 7) + 90) / 25))+'-'+CONVERT(VARCHAR,CONVERT(INT,(((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) - (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) + ((((2 * FLOOR((@year / 100.0)) % 4) + (2*((@year % 100) / 4))) - ((@year % 100) % 4) - ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) + (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) +32) % 7) + (FLOOR((((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) - (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) + ((((2 * FLOOR((@year / 100.0)) % 4) + (2*((@year % 100) / 4))) - ((@year % 100) % 4) - ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) + (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) +32) % 7) + 90) / 25)) + 19) % 32,0))),'Holiday','Easter Sunday' UNION ALL
SELECT DATEADD(DAY,-2,CONVERT(DATE,CONVERT(VARCHAR,@year) + '-0'+CONVERT(VARCHAR, FLOOR((((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) - (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) + ((((2 * FLOOR((@year / 100.0)) % 4) + (2*((@year % 100) / 4))) - ((@year % 100) % 4) - ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) + (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) +32) % 7) + 90) / 25))+'-'+CONVERT(VARCHAR,CONVERT(INT,(((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) - (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) + ((((2 * FLOOR((@year / 100.0)) % 4) + (2*((@year % 100) / 4))) - ((@year % 100) % 4) - ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) + (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) +32) % 7) + (FLOOR((((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) - (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) + ((((2 * FLOOR((@year / 100.0)) % 4) + (2*((@year % 100) / 4))) - ((@year % 100) % 4) - ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) + (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) +32) % 7) + 90) / 25)) + 19) % 32,0)))),'Holiday','Good Friday' UNION ALL
SELECT DATEADD(DAY,1,CONVERT(DATE,CONVERT(VARCHAR,@year) + '-0'+CONVERT(VARCHAR, FLOOR((((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) - (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) + ((((2 * FLOOR((@year / 100.0)) % 4) + (2*((@year % 100) / 4))) - ((@year % 100) % 4) - ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) + (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) +32) % 7) + 90) / 25))+'-'+CONVERT(VARCHAR,CONVERT(INT,(((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) - (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) + ((((2 * FLOOR((@year / 100.0)) % 4) + (2*((@year % 100) / 4))) - ((@year % 100) % 4) - ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) + (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) +32) % 7) + (FLOOR((((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) - (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) + ((((2 * FLOOR((@year / 100.0)) % 4) + (2*((@year % 100) / 4))) - ((@year % 100) % 4) - ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30) + (FLOOR((@year % 19.0 + (11 * ((( (19 * (@year % 19.0)) + FLOOR(@year / 100.0)) - FLOOR((@year / 100.0) / 4) - FLOOR((8 * (@year / 100.0) + 13) / 25.0) + 15) % 30))) / 319)) +32) % 7) + 90) / 25)) + 19) % 32,0)))),'Holiday','Easter Monday'
update @table
set date =
case when MONTH(date) = 12 AND name != 'Boxing Day' and datepart(weekday,date) = 7 then dateadd(day,2,date)
when MONTH(date) = 12 AND name != 'Boxing Day' and datepart(weekday,date) = 1 then dateadd(day,1,date)
when MONTH(date) = 12 AND name = 'Boxing Day' and datepart(weekday,date) = 7 then dateadd(day,2,date)
when MONTH(date) = 12 AND name = 'Boxing Day' and datepart(weekday,date) = 1 then dateadd(day,2,date)
when MONTH(date) = 12 AND name = 'Boxing Day' and datepart(weekday,date) = 2 then dateadd(day,1,date)
else date
end
return
end
GO
create function Dates(@date datetime)
returns @table table
now datetime,
today datetime,
Month_start datetime,
Month_end datetime,
Prev_Month_Start datetime,
Prev_Month_End datetime,
Week_Start datetime,
Week_End datetime,
Prev_Week_Start datetime,
Prev_Week_End datetime,
Quarter_Start datetime,
Quarter_End datetime,
Prev_Quarter_Start datetime,
Prev_Quarter_End datetime,
Year_Start datetime,
Year_End datetime,
Prev_Year_Start datetime,
Prev_Year_End datetime,
Month_End_TS datetime,
Prev_Month_End_TS datetime,
Week_End_TS datetime,
Prev_Week_End_TS datetime,
Quarter_End_TS datetime,
Prev_Quarter_End_TS datetime,
Year_End_TS datetime,
Prev_Year_End_TS datetime,
Year smallint,
Month smallint,
Day smallint,
Month_Name varchar(15),
Day_Name varchar(15),
WD SMALLINT,
Week INT,
isHoliday bit
as
begin
if @date IS NULL set @date = getdate()
insert into @table
select
@date as now,
convert(datetime,convert(varchar,@date,101)) as today,
dateadd(day,0-day(@date)+1,convert(datetime,convert(varchar,@date,101))) as Month_Start,
dateadd(day,-1,dateadd(month,1,dateadd(day,0-day(@date)+1,convert(datetime,convert(varchar,@date,101))))) as Month_end,
dateadd(month,-1,dateadd(day,0-day(@date)+1,convert(datetime,convert(varchar,@date,101)))) as Prev_Month_start,
dateadd(day,-1-day(@date)+1,convert(datetime,convert(varchar,@date,101))) as Prev_Month_End,
dateadd(day,1-datepart(dw,@date),convert(datetime,convert(varchar,@date,101))) as Week_Start,
dateadd(day,7-datepart(dw,@date),convert(datetime,convert(varchar,@date,101))) as Week_End,
dateadd(day,-6-datepart(dw,@date),convert(datetime,convert(varchar,@date,101))) as Prev_Week_Start,
dateadd(day,0-datepart(dw,@date),convert(datetime,convert(varchar,@date,101))) as Prev_Week_End,
convert(datetime,convert(varchar,year(@date)) +'-'+ right('0'+convert(varchar,((datepart(QUARTER,@date)-1)*3)+1),2)+'-01') as quarter_start,
dateadd(day,-1,dateadd(quarter,1,convert(datetime,convert(varchar,year(@date)) +'-'+ right('0'+convert(varchar,((datepart(QUARTER,@date)-1)*3)+1),2)+'-01'))) as quarter_end,
convert(datetime,convert(varchar,year(dateadd(quarter,-1,@date))) +'-'+ right('0'+convert(varchar,((datepart(QUARTER,dateadd(quarter,-1,@date))-1)*3)+1),2)+'-01') as prev_quarter_start,
dateadd(day,-1,dateadd(quarter,1,convert(datetime,convert(varchar,year(dateadd(quarter,-1,@date))) +'-'+ right('0'+convert(varchar,((datepart(QUARTER,dateadd(quarter,-1,@date))-1)*3)+1),2)+'-01'))) as prev_quarter_end,
dateadd(day,1-day(@date),dateadd(month,1-month(@date),convert(varchar,@date,101))) as Year_Start,
dateadd(year,1,dateadd(day,0-day(@date),dateadd(month,1-month(@date),convert(varchar,@date,101)))) as Year_End,
dateadd(year,-1,dateadd(day,1-day(@date),dateadd(month,1-month(@date),convert(varchar,@date,101)))) as Prev_Year_Start,
dateadd(year,-1,dateadd(year,1,dateadd(day,0-day(@date),dateadd(month,1-month(@date),convert(varchar,@date,101))))) as Prev_Year_End,
dateadd(ms,-3,dateadd(day,0,dateadd(month,1,dateadd(day,0-day(@date)+1,convert(datetime,convert(varchar,@date,101)))))) as Month_End_Ts,
dateadd(ms,-3,dateadd(day,-1-day(@date)+2,convert(datetime,convert(varchar,@date,101)))) as Prev_Month_End_TS,
dateadd(ms,-3,dateadd(day,8-datepart(dw,@date),convert(datetime,convert(varchar,@date,101)))) as Week_End_TS,
dateadd(ms,-3,dateadd(day,1-datepart(dw,@date),convert(datetime,convert(varchar,@date,101)))) as Prev_Week_End_TS,
dateadd(ms,-3,dateadd(day,0,dateadd(quarter,1,convert(datetime,convert(varchar,year(@date)) +'-'+ right('0'+convert(varchar,((datepart(QUARTER,@date)-1)*3)+1),2)+'-01')))) as quarter_end_TS,
dateadd(ms,-3,dateadd(day,0,dateadd(quarter,1,convert(datetime,convert(varchar,year(dateadd(quarter,-1,@date))) +'-'+ right('0'+convert(varchar,((datepart(QUARTER,dateadd(quarter,-1,@date))-1)*3)+1),2)+'-01')))) as prev_quarter_end_TS,
dateadd(ms,-3,dateadd(year,1,dateadd(day,1-day(@date),dateadd(month,1-month(@date),convert(varchar,@date,101))))) as Year_End_TS,
dateadd(ms,-3,dateadd(day,1-day(@date),dateadd(month,1-month(@date),convert(varchar,@date,101)))) as Prev_Year_End_TS,
Year(@date) as Year,
Month(@date) as Month,
Day(@Date) as Day,
datename(month,@Date) as Month_Name,
datename(WEEKDAY,@date) as Day_Name,
datepart(weekday,@date) as WD,
DATEPART(WEEK,@date) AS Week,
COALESCE((SELECT 1
FROM dbo.Holidays(YEAR(@date)) h
WHERE h.date = @date),0) AS isHoliday
return
end
go
The holidays function is set up for Saskatchewan right now, but its a small matter to adjust it to your region.
You can then do this:
DECLARE @calendar TABLE (date DATE)
WHILE (SELECT COUNT(*) FROM @calendar) < 365
BEGIN
INSERT INTO @calendar (date)
VALUES (DATEADD(day,1,(SELECT COALESCE(MAX(date),CURRENT_TIMESTAMP) FROM @calendar)))
END
SELECT MONTH(date) AS month, MIN(date) AS fbd
FROM @calendar c
CROSS APPLY dbo.Dates(c.date)
WHERE DATEPART(DAY,c.date) NOT IN (1,7) AND isHoliday = 0
GROUP BY MONTH(date) -
Adding reminders to my calendar items is no longer an option after the software upgrade. I also can't get to day and week view, only month view. What's a possible solution? I'm using Andriod version 4.4.2 with kernal 3.4.0.
@MaloneTP
Thanks for keeping me updated! Do you see the screen options displayed in the following link: http://bit.ly/T2koBL for changing the calendar view options in Kies Air? Also, let me know if you're able to add a Reminder by following these steps: http://bit.ly/T2l9dY. Keep me posted. Thanks!
AnthonyTa_VZW
Follow us on Twitter @VZWSupport -
Formula to calculate due date considering only business days (Middle East)
I have a form which contains two fields: 'Start Date' and 'Completion Date'; the 'Completion Date' field is automatically set, it's always 3 more days than the 'Start Date' field.
The problem is that these 3 days must be only business days.
- if 'Start Date' is on Sunday then the 'Completion Date' should be set to next Wednesday
- if 'Start Date' is on Monday then the 'Completion Date' should be set to next Friday
- if 'Start Date' is on Tuesday then the 'Completion Date' should be set to next Sunday
- if 'Start Date' is on Wednesday then the 'Completion Date' should be set to next Monday
- if 'Start Date' is on Thursday then the 'Completion Date' should be set to next Tuesday
- if 'Start Date' is on Friday then the 'Completion Date' should be set to next Tuesday
- if 'Start Date' is on Saturday then the 'Completion Date' should be set to next Tuesday
Friday and Saturday should be ignored as 'Completion Date' (weekend in Middle East).
Anyone has any idea of how to make this formula? I need to put it into a calculated SharePoint column.
Thanks in advance for your help.Hi
check my post
http://www.romeodonca.ro/Lists/DB_IT/Adding%20a%20number%20of%20working%20days%20to%20a%20specific%20date
If you need more details let me know
Romeo Donca, Orange Romania (MCSE, MCITP, CCNA) Please Mark As Answer if my post solves your problem or Vote As Helpful if the post has been helpful for you. -
Baseline date calculation excluding non-Business days
Hi,
We have a requirement to exclude non-Business days while calculating Baseline date.
Currently the Baseline Date being populated in the Accounting Document is Document date + 5days(including Holidays).
For eg
Current Scenario
Document Date: 12th Feb 2008
Baseline date: 17th feb 2008.
Requirement:
Document Date: 12th Feb 2008
Baseline date: 19th feb 2008(Excluding Sat & Sun).
Request you to share useful info in this regard.
Thanks
BinuHi,
Use user exit RV60FUS5 for these base line date calculations.
Thanks
Krishna. -
Can I buy an unlock iphone 5 in US now? If I can, how many business days can I get it? Thank you!
Yep, officially for sale now. Apple's online store shows it ships immediately, so should be in stock at just about every Apple store.
-
Get Next business day conditionally
Hi All,
I have a calendar table with all federal holidays, saturdays and sundays flagged to 1.
I need help in finding the next business day from givendate and that too Conditionallly.. means
Lets say today's date is 01/02/2014(wednesday) and I want to know the next businessday after 10 days which would be 01/16/2014(thursday). Exclude saturdays and sundays in between.
I started like this..but gives me wrong date..
Also, when 10th day is saturday or sunday or any holiday it should give next business day.
so i need help in tweaking my query.
select NextBusinessDay = min(a.Date)+10
from [dbo].[Calendar] a
where
a.Date > GETDATE()
and a.day_Name not in ('Saturday','Sunday')
and a.IsHoliday <> 1
Thanks,
RH
sqlTry this out:
DECLARE @calendar TABLE (date DATE, holiday BIT, weekend BIT)
DECLARE @i INT = 0
SET NOCOUNT ON
WHILE @i < 50
BEGIN
INSERT INTO @calendar (date, holiday, weekend)
VALUES (DATEADD(DAY,@i,'2014-01-01'),0,CASE WHEN DATEPART(WEEKDAY,DATEADD(DAY,@i,'2014-01-01')) IN (1,7) THEN 1 ELSE 0 END)
SET @i = @i + 1
END
UPDATE @calendar SET holiday = 1 WHERE date = '2014-01-20'
SET NOCOUNT OFF
SELECT max(date)
FROM (
SELECT TOP 10 *
FROM @calendar
WHERE date > '2014-01-02'
AND holiday <> 1
AND weekend <> 1
) a
Obviously I've simulated your calendar, and forced a date into it. -
Number of business days (excluding holidays) ?
Hi All,
What is the SQL query to find number of business days (excluding holidays) between 2 given dates ?
List of Holidays will be maintained as a separate table.
I need a SQL query rather than a stored procedure or function.
I am using oracle 9i.
Thanks in advance.Does this thread help?
Need to find number of business days - query pls -
Formula to calculate due date considering only business days
Hello,
I have a form which contains two fields: 'Start Date' and 'Due Date'. The 'Due Date' field is automatically set , it's always 4 more days than the 'Start Date' field.
The problem is: Those 4 days must be only business days... e.g., if 'Start Date' is on Friday then the 'Due Date' should be set on the next Thursday. Saturday and Sunday are ignored. Anyone has any idea of how to make this formula? I need to put it into
a calculated SharePoint column.
Thanks in advance.Hello,
you can use this calculated formula for Due Date:
=IF(WEEKDAY(StartDate+4)=7,StartDate+6,IF(WEEKDAY(StartDate+4)=1,StartDate+5,StartDate+4))
Be aware that it treats holidays and national bank holidays as business days unless they are on a weekend.
cheers, teylyn
teylyn,
Thank you for your example. However this formula doesn't seem to be entirely correct, right? Because
according to the excel spreadsheet you sent, when the Start Date is May 29th (Thursday), Due Date
will be on June 2nd (Monday) taking so only two days rather than four.
Maybe a little change in this formula and we will be fine.
Maybe you are looking for
-
Mail wouldnt let me send outgoing mail claiming there to be an error whilst there was an outgoing connection. So I thought to completely reset the entire app and found a forum that told me to delete something >_> And so I deleted this ~/library/prefe
-
Ipod classic is not getting detected by Itunes.
There were problems from when I updated my system to windows8. But some how in 2-3 times it usually detects the ipod and I was able to sync music. But now Itunes is not at all detecting my Ipod. I tried in different systems, in windows 7(which crashe
-
MS SQL server installation in PI 7.1?
Hi Guys, Which is the best way of installing the MSSQL Server 2005 during the installation of PI 7.1 1. SQL server database with SQL4SAP 2. SQL Server 2005 Database Server Manually any help would be appreciated Thanks, Srini
-
Bonjour, Je suis nouvel utilisateur d'un BB Curve 9320 en version 7.1 et je n'arrive pas à configurer les mails sur le téléphone en effet lorsque j'essai de configurer mon compte, il me demande mon mail et mon mot de passe d'activation Quel est ce fa
-
Hello, I am troubleshooting playback errors in Cap 2 exes that contains imported .swf and .avi files. Errors: The exe will play back correctly any number of times. Then, stops playing back correctly. I don't think this behavior begins to occur until