Функция даты эпохи Oracle за предыдущий месяц - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть таблица с системой дат EPOCH, я хочу выбирать данные только за предыдущий месяц.Я много гуглил, но единственные результаты, которые я нахожу, связаны с системой datetime.Не могли бы вы помочь?

Я буду использовать этот SQL-запрос для импорта данных в Power BI.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы можете преобразовать свой диапазон дат в эпоху , используя ( date_to_convert - DATE '1970-01-01' ) * 24 * 60 * 60 (при условии, что ваша эпоха в секундах с 1970 года).

Вы хотите найти значения, превышающиеили равный началу предыдущего месяца и до начала текущего месяца:

SELECT *
FROM   your_table
WHERE  epoch_column >= ( ADD_MONTHS( TRUNC(SYSDATE,'MM'), - 1 ) - DATE '1970-01-01' ) * 24 * 60 * 60
AND    epoch_column <  ( TRUNC( SYSDATE, 'MM' ) - DATE '1970-01-01' ) * 24 * 60 * 60

Если вы используете верхнюю границу полуночи последнего дня предыдущего месяца, тогда вы пропустите всезначения, которые находятся в этот последний день, но после полуночи.

0 голосов
/ 14 февраля 2019

Вы можете преобразовать эпоху Unix (количество секунд с 1 января 1970 г.) в следующую дату:

TO_DATE('01/01/1970', 'dd/mm/yyyy') + epoch_column / 60 / 60 / 24

Деление превращает эпоху в число дней, которые можно добавить кисходная дата.

Если вы хотите отфильтровать это за предыдущий месяц, то:

TO_DATE('01/01/1970', 'dd/mm/yyyy') + epoch_column / 60 / 60 / 24
    BETWEEN ADD_MONTHS(TRUNC(sysdate, 'mm'), -1) 
    AND LAST_DAY(ADD_MONTHS(TRUNC(sysdate, 'mm'), -1))

Или еще лучше:

epoch_column 
    BETWEEN
        ( 
            ADD_MONTHS(TRUNC(sysdate, 'mm'), -1) 
            - TO_DATE('01/01/1970', 'dd/mm/yyyy')
        ) * 60 * 60 * 24
    AND (
            LAST_DAY(ADD_MONTHS(TRUNC(sysdate, 'mm'), -1)) 
            - TO_DATE('01/01/1970', 'dd/mm/yyyy')
        ) * 60 * 60 * 24

Это решение должно быть болееэффективный, поскольку над фильтруемым столбцом не выполняется никаких операций, поэтому он должен иметь возможность использовать существующий индекс в epoch_column.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...