SQL-запрос Oracle, извлекающий данные из точки сегодняшнего дня и точки будущего завтрашнего дня - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть sql, который я должен иметь возможность получать данные с 4 утра сегодня до 4 утра завтра.Мне нужны данные, чтобы показать почасовую производительность, так как операция выполняется с 4 утра до 1:30 утра. У меня проблемы с введением логики, которая распознает опрокидывание в полночь.Это должно вытянуть даты автоматически, а не вводить дату вручную.По существу:

where mod_date_time >= trunc(sysdate) + 4/24
and mod_date_time <= trunc(sysdate)+1 + 3/24 + 59/24*60

Спасибо

1 Ответ

0 голосов
/ 28 ноября 2018

Это довольно легко сделать с интервалами ...

 where mod_date_time >= trunc(sysdate) + to_dsinterval('0 4:0:0') -- 4:00am today
 and  mod_date_time <= trunc(sysdate) + to_dsinterval('1 4:0:0') -- 4:00am tomorrow

... за исключением этой загадки:

Проблема с опрокидыванием состоит в том, что, как только наступает полночь,даты будут корректироваться

Так что вы не можете использовать SYSDATE в этом запросе без привязки.У вас есть столбец, который представляет день смены или время начала?Вы можете использовать это вместо:

  where mod_date_time >= trunc(shift_start_date) + to_dsinterval('0 4:0:0') -- 4:00am today
 and  mod_date_time <= trunc(shift_start_date) + to_dsinterval('1 4:0:0') -- 4:00am tomorrow

В качестве альтернативы, вы можете просто запустить запрос в историческом режиме:

 where mod_date_time >= trunc(sysdate-1) + to_dsinterval('0 4:0:0') -- 4:00am today
 and  mod_date_time <= trunc(sysdate) + to_dsinterval('0 4:0:0') -- 4:00am tomorrow
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...