Получить данные с пятницы 7 вечера до текущей даты в Oracle SQL - PullRequest
1 голос
/ 16 апреля 2020

Извлечение данных из прошлой пятницы с 7 вечера до текущей даты.

Пример: сегодняшняя дата 17 апреля 6.59 вечера будет извлекать данные с 10 апреля 7 вечера до 17 апреля 6,59 вечера.

У меня просто есть идея как это: -

case
  when to_char(sysdate, 'Day') = 'Saturday' then
   select ODAT_LOC where ODAT_LOC BETWEEN sysdate and sysdate -1
  when to_char(sysdate, 'Day') = 'Sunday' then
   select ODAT_LOC where ODAT_LOC BETWEEN sysdate and sysdate -2
  when to_char(sysdate, 'Day') = 'Monday' then
   select ODAT_LOC where ODAT_LOC BETWEEN sysdate and sysdate -3
  when to_char(sysdate, 'Day') = 'Tuesday' then
   select ODAT_LOC where ODAT_LOC BETWEEN sysdate and sysdate -4 
  when to_char(sysdate, 'Day') = 'Wednesday' then
   select ODAT_LOC where ODAT_LOC BETWEEN sysdate and sysdate -5 
  when to_char(sysdate, 'Day') = 'Thursday' then
   select ODAT_LOC where ODAT_LOC BETWEEN sysdate and sysdate -6 
  when to_char(sysdate, 'Day') = 'Friday' then
   select ODAT_LOC where ODAT_LOC BETWEEN sysdate and sysdate -7 
  when to_char(sysdate, 'Day') = 'Friday' then
   select ODAT_LOC where ODAT_LOC BETWEEN sysdate and sysdate  
  else
    ''
end ODAT_LOC

Но не в состоянии контролировать вовремя.

У кого-нибудь есть идеи, как сделать это в oracle sql.

Спасибо.

1 Ответ

3 голосов
/ 16 апреля 2020

Это позволит вам получить все строки из таблицы с прошлой пятницы 7 вечера. CASE вам не нужен.

select * FROM YOURTABLE 
where ODAT_LOC >= (next_day(trunc(sysdate), 'FRI') - 7 + interval '19' hour)

Я предполагаю, что ODAT_LO C имеет тип DATE.

SQL> 
select sysdate, next_day(trunc(sysdate), 'FRI') from dual;

SYSDATE              NEXT_DAY(TRUNC(SYSDA
-------------------- --------------------
2020-04-16-THU 12:22 2020-04-17-FRI 00:00


SQL> 
select sysdate, next_day(trunc(sysdate), 'FRI') - 7 from dual;

SYSDATE              NEXT_DAY(TRUNC(SYSDA
-------------------- --------------------
2020-04-16-THU 12:22 2020-04-10-FRI 00:00


SQL> 
select sysdate, next_day(trunc(sysdate), 'FRI') - 7  + interval '19' hour from dual;

SYSDATE              NEXT_DAY(TRUNC(SYSDA
-------------------- --------------------
2020-04-16-THU 12:22 2020-04-10-FRI 19:00
...