импортировать данные между определенным временем из последовательных дней - PullRequest
1 голос
/ 03 октября 2019

В отчете BIRT (, который автоматически выполняет запрос в течение 10 минут - 24x7 ), я хотел бы сообщить данные типа данных «Timestamp», которые я импортирую из таблицы в банк данных Oracle с помощью запроса. Допустим, у меня есть таблица с именем «таблица 1». Таблица 1 содержит столбец с именем «column1» временной метки типа данных. Данные в столбце 1 взяты из машины, которая работает непрерывно (24x7 - 365 дней).

Каждый день в отчете я хотел бы представить только данные за 24 часа, то есть между 05:30:00 (текущий день) и 05:30:00 (следующий день).

SELECT column1 from table 1
WHERE coulmn1 = SYSDATE - INTERVAL '24' hour;

Извлечение данных за последние 24 часа или дни или месяцы легко, но как определить логику в выражении where, которое берет реальное системное время в качестве справочного и предоставляет данные в период с 05:30 (нынешний день)) и 05:30 (следующий день).

Например: при автоматическом выполнении запроса в 01:00:00 (или 1:00) должны отображаться данные за предыдущий день (05:30:00) поприсутствует (01:00:00)

При автоматическом выполнении запроса в 08:00:00 (или 8:00) должны отображаться данные за текущий день (с 05:30:00 до 08:00:00). .

Любая помощь, как определить логику, в которой оператор будет оценен.

1 Ответ

3 голосов
/ 03 октября 2019

Используйте TRUNC(SYSDATE), чтобы обрезать его обратно до полуночи, а затем добавьте INTERVAL:

SELECT column1
FROM   table1
WHERE  column1 >= TRUNC( SYSDATE ) + INTERVAL '0 05:30' DAY TO MINUTE
AND    column1 <  TRUNC( SYSDATE ) + INTERVAL '1 05:30' DAY TO MINUTE;

Если вы хотите обработать случай, когда SYSDATE предшествует 05:30, тогда:

SELECT column1
FROM   table1
WHERE  column1 >= TRUNC( SYSDATE - INTERVAL '05:30' HOUR TO MINUTE )
                  + INTERVAL '0 05:30' DAY TO MINUTE
AND    column1 <  TRUNC( SYSDATE - INTERVAL '05:30' HOUR TO MINUTE )
                  + INTERVAL '1 05:30' DAY TO MINUTE;

А если вы не хотите показывать будущее, тогда:

SELECT column1
FROM   table1
WHERE  column1 >= TRUNC( SYSDATE - INTERVAL '05:30' HOUR TO MINUTE )
                  + INTERVAL '0 05:30' DAY TO MINUTE
AND    column1 <= SYSTIMESTAMP;
...