Oracle SQL - В понедельник извлекать данные из пятницы, субботы и воскресенья, из предыдущего дня - PullRequest
0 голосов
/ 06 февраля 2020
SELECT *
FROM   estar.estar_traded_cash_activity c 
WHERE  Trunc(c.process_dt) = Trunc(sysdate - 1)

ожидаемый результат: 03-ФЕВ-2020 должен принести результаты (31 января, 01 февраля, 02 февраля), а 31 января 2020 года должен принести результаты (30- Jan-2020)

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Вы можете использовать OR оператор с TO_CHAR следующим образом:

SELECT *
FROM ESTAR.ESTAR_TRADED_CASH_ACTIVITY C
WHERE
    ( TO_CHAR(SYSDATE, 'DY') = 'MON'
      AND TRUNC(C.PROCESS_DT) BETWEEN TRUNC(SYSDATE - 3) AND TRUNC(SYSDATE - 1) )
    OR ( TRUNC(C.PROCESS_DT) = TRUNC(SYSDATE - 1) );

Приветствия !!

0 голосов
/ 06 февраля 2020

Вы можете использовать TRUNC(SYSDATE,'IW') для усечения даты до полуночи понедельника (начало недели ISO), и вы можете использовать это для сравнения значений способом, который не зависит от настроек NLS для языка даты и территории.

Вы также можете сравнить диапазон, поскольку это позволит Oracle использовать индекс для вашего столбца даты (тогда как использование TRUNC(your_column) не позволит Oracle использовать индекс и потребует отдельной функции- на основе индекса).

SELECT *
FROM   estar.estar_traded_cash_activity
WHERE  process_dt >= CASE WHEN TRUNC(SYSDATE) = TRUNC(SYSDATE,'IW')
                     THEN TRUNC(SYSDATE-3)
                     ELSE TRUNC(SYSDATE-1)
                     END
AND    process_dt <  TRUNC(SYSDATE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...