Получить первый и последний день предыдущего месяца с помощью SYS.ANYDATA.CONVERTDATE - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу получить первый и последний день предыдущего месяца, используя SYS.ANYDATA.CONVERTDATE(TRUNC(SYSDATE,'MM')), поскольку это позволяет мне использовать дату в моем скрипте цепочки заданий только путем преобразования даты с использованием SYS.ANYDATA.CONVERTDATE.

В ARGUMENT_NAME для IN_DATE_FROM_DTS я хочу указать первый день предыдущего месяца в параметре DEFAULT_VALUEARGUMENT_NAME для IN_DATE_TO_DTS я хочу поместить последний день предыдущего месяца в параметр DEFAULT_VALUE.

SYS.DBMS_SCHEDULER.DEFINE_ANYDATA_ARGUMENT(
        PROGRAM_NAME => 'TST_PW',
        ARGUMENT_NAME => 'IN_DATE_FROM_DTS',
        ARGUMENT_POSITION => 7,
        ARGUMENT_TYPE => 'DATE',
        DEFAULT_VALUE => ''
        );
    DBMS_SCHEDULER.DEFINE_ANYDATA_ARGUMENT(
        PROGRAM_NAME => 'TST_PW',
        ARGUMENT_NAME => 'IN_DATE_TO_DTS',
        ARGUMENT_POSITION => 8,
        ARGUMENT_TYPE => 'DATE',
        DEFAULT_VALUE => ''
        );

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

мне просто нужно изменить условие SYS.ANYDATA.CONVERTDATE (TRUNC (SYSDATE, 'MM')) так, чтобы оно получило первую дату и последнюю дату предыдущего месяца

Так что на самом деле вы просто спрашиваете, как получить первый и последний день предыдущего месяца вместо первого дня текущего месяца, который вы получаете с TRUNC(SYSDATE,'MM').

Вы можете использовать add_months() и last_day() функции.Чтобы увидеть первый и последний день текущего месяца, вы можете использовать:

select sysdate as raw_date,
  trunc(sysdate, 'MM') as first_of_month,
  last_day(trunc(sysdate)) as last_of_month
from dual;

RAW_DATE            FIRST_OF_MONTH      LAST_OF_MONTH      
------------------- ------------------- -------------------
2018-09-18 10:30:33 2018-09-01 00:00:00 2018-09-30 00:00:00

А за предыдущий месяц:

select add_months(sysdate, -1) as raw_date,
  trunc(add_months(sysdate, -1), 'MM') as first_of_month,
  last_day(trunc(add_months(sysdate, -1))) as last_of_month
from dual;

RAW_DATE            FIRST_OF_MONTH      LAST_OF_MONTH      
------------------- ------------------- -------------------
2018-08-18 10:30:33 2018-08-01 00:00:00 2018-08-31 00:00:00

Как anydata вы можете использовать:

sys.anydata.convertdate(trunc(add_months(sysdate, -1), 'MM'))
sys.anydata.convertdate(last_day(trunc(add_months(sysdate, -1))))

так:

select sys.anydata.convertdate(trunc(add_months(sysdate, -1),'MM'))  as first_of_month,
  sys.anydata.convertdate(last_day(trunc(add_months(sysdate, -1)))) as last_of_month
from dual;

FIRST_OF_MONTH()
------------------------------------------------------------------------------------------------------------------------
LAST_OF_MONTH()
------------------------------------------------------------------------------------------------------------------------
ANYDATA()
ANYDATA()

Преобразование обратно в фактические даты для отображения:

select sys.anydata.convertdate(trunc(add_months(sysdate, -1), 'MM')).accessdate()
    as first_of_month,
  sys.anydata.convertdate(last_day(trunc(add_months(sysdate, -1)))).accessdate()
    as last_of_month
from dual;

FIRST_OF_MONTH      LAST_OF_MONTH      
------------------- -------------------
2018-08-01 00:00:00 2018-08-31 00:00:00
0 голосов
/ 18 сентября 2018

это будет работать в течение предыдущих месяцев:

select trunc(add_months(sysdate,-1), 'MM'),last_day(add_months(sysdate,-1)) from dual;

пример вывода:

01-08-18    31-08-18

для получения дня это будет:

select TO_CHAR((select trunc(add_months(sysdate,-1), 'MM') from dual), 
'DAY') ,TO_CHAR((select 
last_day(add_months(sysdate,-1)) from dual), 'DAY')from dual;

пример вывода:

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