2013-12-10 2 views
0

Я пытаюсь получить следующие 5 рабочих дней, используя SYSDATE в WHERE (то есть.КУДА 5 рабочих дней

where trunc(teststart) between trunc(sysdate) and trunc(sysdate+4)), 

но если диапазон включает в пятницу, он должен рассчитывать в выходные дни, субботу & воскресенье.

что такое команда, которая расскажет вам день недели, если смотреть на SYSDATE или SYSDATE + 3 (или номер)? Как бы вы сделать что-то вроде этого?

+0

Следующая помощь: http://stackoverflow.com/questions/14898357/calculate-business-days-in-oracle-sqlno-functions-or-procedure – Seymour

ответ

1

вы не можете сделайте это вычисление, потому что нет никакого способа, чтобы оракул знал, что именно я рабочий день. Это потому, что каждый регион имеет свои собственные праздники. Для этого вам нужно будет создать табличный календарь и поместить на нем все дни, обозначая, какие из них являются рабочим днем. Затем вы можете просто присоединиться к таблице с этой таблицей календаря, используя пункт between

+0

Есть ли команда/функция, которая возвращает «MON», 0, 'TUE', 1, 'WED', 2, 'THU', 3 ... и т. Д. ... что я могу проверить SYSDATE? – Zornjac

+0

to_char (sysdate, 'D') он вернет номер дня в неделю, но это зависит от конфигурации вашей базы данных, начинающейся с недели. См. Этот http://psoug.org/reference/date_func.html. Существует таблица для каждого формата, который вы можете использовать. –

+0

Фактически это зависит от NLS-конфигурации вашего ** сеанса **, а не от базы данных. Чтобы быть уверенным, что вы получаете правильный день, вам нужно использовать функцию типа TO_CHAR (SYSDATE, «DAY», «NLS_DATE_LANGUAGE = american»). –

0

@ Точка JorgeCampos хорошо взята за день 1. Вы указываете с MON 0, что понедельник - начало недели, настройки NLS в БД и ваш locale определяет это.

select to_char(sysdate, 'D'), to_char(sysdate,'DAY') from dual; 

дает результат, который вы просили. У нас есть таблица, которая будет в следующем году заселена в декабре следующего года. Включает в себя все праздники и т.д.

JCAL_JOB_DATE       NOT NULL DATE 
JCAL_USER_ID         VARCHAR2(30) 
JCAL_ACTIVITY_DATE        DATE 
JCAL_BUSINESS_DAY        VARCHAR2(2) 
JCAL_HOLIDAY         VARCHAR2(2) 
JCAL_WEEKEND         VARCHAR2(2) 

Это используется для прогнозирования рабочих мест в будущем, и некоторые повторяющиеся задания, которые не хотят работать на праздники или выходные, например.

select jcal_job_date from jcal where 
    JCAL_JOB_DATE > sysdate 
and JCAL_BUSINESS_DAY='Y' 
and rownum <6; 

Это один не очень хороший способ получить пятый рабочий день. Fetch Вы можете использовать множество других функций, чтобы оптимизировать это.

Этот вид таблицы ОЧЕНЬ полезен для определения той же информации (работы, праздника, выходного дня) в прошлом.

Где я нахожусь, праздники, которые выпадают в последний четверг ноября, и добавляются дополнительные праздники. Программирование для этого сложно по сравнению с простым поиском, который отлично работает.

Смежные вопросы