Oracle вычтите 5 рабочих дней из SYSDATE - PullRequest
2 голосов
/ 30 января 2020
SELECT COUNT(1)
    INTO ln_count
    FROM batches eb
    JOIN template_groups ebtg
      ON ebtg.ebtg_id = eb.ebtg_id
   WHERE ebtg.group_name = upper(pvi_batch_group_name)
     AND eb.created_ts > SYSDATE - 5
     AND eb.status = 'COMPLETE';

Выше запроса вычитает только 5 дней, включая выходные, но не уверен, как исключить субботу и субботу.

Ответы [ 3 ]

1 голос
/ 30 января 2020

Это не так просто. Я бы проверил текущий день недели и сделал условную логику c, чтобы вычислить, сколько дней из нее нужно вычесть:

sysdate 
- case to_char(sysdate, 'fmdy') 
    case 'fri' then 5
    case 'sat' then 6
    case 'sun' then 7
    case 'mon' then 7
    case 'tue' then 7
    case 'wed' then 7
    case 'thu' then 6
end

Это можно немного разложить на множители:

sysdate 
- case 
    when to_char(sysdate, 'fmdy') = 'fri' then 5
    when to_char(sysdate, 'fmdy') in ('sat', 'thu') then 6
    else 7
end
1 голос
/ 30 января 2020

Если это только один указанный c сценарий из 5 рабочих дней, то 5 рабочих дней обычно переводятся в 7 календарных дней. Возможно, вы могли бы использовать 7 вместо 5, если ваша дата создания не выпадает на выходные:

SELECT COUNT(1)
    INTO ln_count
    FROM batches eb
    JOIN template_groups ebtg
      ON ebtg.ebtg_id = eb.ebtg_id
   WHERE ebtg.group_name = upper(pvi_batch_group_name)
     AND eb.created_ts > SYSDATE - 7
     AND eb.status = 'COMPLETE';
1 голос
/ 30 января 2020

Может быть, это:

WHERE eb.created_ts > SYSDATE - 7
    AND TO_CHAR(eb.created_ts, 'Dy', 'nls_date_language = american') not in ('Sat', 'Sun')

Обратите внимание, что это решение не учитывает публичные c праздники. Если вам нужно принять их во внимание, решение более сложное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...