мне просто нужно изменить условие 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