Вот пример:
Существует четыре переменные, первые две говорят сами за себя, просто введите дату в формате ГГГГММДД, третья - установить количество рабочих дней в неделю, поэтому, если сайт работает 6 дней в неделю, установите его 6, пять дней в неделю введите 5 и т. д. Наконец,
DATE_SEQ_NORML_FACTOR должен быть равен 1 при работе с Oracle. Это делается для того, чтобы юлианская дата была равна 1 в понедельник, 2 во вторник и т. Д. При применении MOD 7. Другие БД, вероятно, будут иметь разные значения от 0 до 6, поэтому проверьте их перед использованием с другими БД.
Вот ограничения:
1. Эта формула предполагает, что первый день недели - понедельник.
2. Эта формула предполагает, что все дни в течение одной недели НЕПРЕРЫВНЫ.
3. Эта формула будет работать ТОЛЬКО тогда, когда две даты, включенные в расчет, приходятся на рабочий день или рабочий день, например. «Дата начала» в СУББОТУ, когда локация работает, только Пн-Пт не будет работать.
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