Дата и время SQL

Мне нужно взять список студентов с датой и временем приема заявок в базе данных университета. Отчет отправляется руководству в 18:00, но руководство может запустить его в 19:00, 20:00 или в любое время ночи. Приложение должно быть всего за 2 дня до даты запуска отчета.

ОРАКУЛ: Я создал запрос, но это даст приложению все 24 часа в сутки. Проблема с этим запросом заключается в том, что руководство запускает запрос в 18:00 и 20:00, и все студенты принимаются в промежутке между этим временем. Результат будет другим.

select 
    to_char(application_accepted_date, 'DD-MON-RR:HH24:MI:SS')
from 
    tbl_application_accepted_date
where 
    to_date(application_accepted_date, 'DD-MON-rr:HH24:MI:SS') = 
    to_date(trunc(sysdate-2), 'DD-MON-rr:HH24:MI:SS')

;

Если какая-либо заявка будет принята между 6 днями вперед, мне нужен список в отчете на следующие дни. Значит, у меня должен быть список принятых студентов с 18:00 предыдущего дня до 5:59 дня подачи заявок. Я получаю заявку, принятую после 18:00, которая мне не нужна в сегодняшнем отчете, я должен получить это в отчете на следующий день. Отчет выполняется 4 октября 2018 года

Я получаю заявку, принятую после 18:00, которая мне не нужна в сегодняшнем отчете, я должен получить это в отчете на следующий день. Отчет подготовлен 4 октября 2018 г.


person Sajjan Lamichhane    schedule 04.10.2018    source источник
comment
to_date(trunc(sysdate-2), 'DD-MON-rr:HH24:MI:SS') бесполезно, просто напишите trunc(sysdate-2) - бессмысленно приводить значение DATE к значению DATE   -  person Wernfried Domscheit    schedule 04.10.2018


Ответы (2)


Если нужно отрезать в 18:00, просто добавьте 18/24 (18 часов) к усеченной дате. Вы также делаете много ненужного кастинга. Пока application_accepted_date является полем даты, вы можете просто сравнить его как дату.

select to_char(application_accepted_date, 'DD-MON-RR:HH24:MI:SS')
from tbl_application_accepted_date
where application_accepted_date >= trunc(sysdate-3)+18/24
  and application_accepted_date <  trunc(sysdate-2)+18/24

Это даст вам любые приложения, начиная с 18:00 3 дня назад и до 18:00 2 дня назад.

EDIT: вы также можете сделать это с интервальными литералами, если хотите. Тот же запрос, что и выше, но более явный в ваших намерениях.

select to_char(application_accepted_date, 'DD-MON-RR:HH24:MI:SS')
    from tbl_application_accepted_date
    where application_accepted_date >= trunc(sysdate-3) + interval '18' hour
      and application_accepted_date <  trunc(sysdate-2) + interval '18' hour
person Patrick H    schedule 04.10.2018

Предполагая, что application_accepted_date является типом данных DATE в вашей модели данных, попробуйте следующее:

select 
    to_char(application_accepted_date, 'DD-MON-RR:HH24:MI:SS')
from 
    tbl_application_accepted_date
    WHERE  application_accepted_date BETWEEN to_date(To_char(Trunc(SYSDATE - 1),'YYYY-MM-DD') 
                  ||'18:00:00','YYYY-MM-DD HH24:MI:SS) and to_date(to_char(trunc(sysdate),'yyyy-mm-dd')||'17:59:59','yyyy-mm-dd hh24:MI:SS)

Это всегда должно возвращать данные с 18:00 вчера до 17:59:59 сегодня.

person Mark J. Bobak    schedule 04.10.2018