Here is an example:
There are four variables, the first two are self-evident, just enter the date in YYYYMMDD format, the third is to set the number of normal working days for a given week, so if the site is working 6 days a week, set it to 6, five days a week - 5, etc. .d. Finally, DATE_SEQ_NORML_FACTOR must be 1 when working with Oracle. This means that in July, 2 on Tuesday, etc., Julian date alignment, etc. will be used. When using MOD 7., another database will likely have different values between 0 and 6, so check it before using against other databases.
Here are the limitations: 1. This formula assumes that the first day of the week is MONDAY. 2. This formula assumes that all days for one week are CONTINUOUS. 3. This formula will work ONLY when the two dates involved in the calculation relate to a weekly or working day, for example. The “Start Date” on SATURDAY when the place is only MON-FRI will not work.
SELECT &&START_DATE_YYYYMMDD "Start Date", --in YYYYMMDD format &&END_DATE_YYYYMMDD "End Date", --in YYYYMMDD format &&WK_WORK_DAY_CNT "Week Work Day Count", --Number of work day per week &&DATE_SEQ_NORML_FACTOR "Normalization Factor", --set to 1 when run in Oracle CASE WHEN FLOOR( TO_CHAR( TO_DATE( &&START_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) + &&DATE_SEQ_NORML_FACTOR / 7 ) = FLOOR( TO_CHAR( TO_DATE( &&END_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) + &&DATE_SEQ_NORML_FACTOR / 7 ) THEN( TO_CHAR( TO_DATE( &&END_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) - TO_CHAR( TO_DATE( &&START_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) + 1 ) ELSE( ( &&WK_WORK_DAY_CNT - MOD( TO_CHAR( TO_DATE( &&START_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) + &&DATE_SEQ_NORML_FACTOR , 7 ) + 1 ) + MOD( TO_CHAR( TO_DATE( &&END_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) + &&DATE_SEQ_NORML_FACTOR , 7 ) + ( ( ( TO_CHAR( TO_DATE( &&END_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) - MOD( TO_CHAR( TO_DATE( &&END_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) + &&DATE_SEQ_NORML_FACTOR , 7 ) ) - ( TO_CHAR( TO_DATE( &&START_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) + ( 7 - ( MOD( TO_CHAR( TO_DATE( &&START_DATE_YYYYMMDD , 'YYYYMMDD') , 'J' ) + &&DATE_SEQ_NORML_FACTOR , 7 ) ) ) ) ) / 7 * &&WK_WORK_DAY_CNT ) ) END "Week Day Count" FROM DUAL