我只需要修改条件sys.anydata.convertdate(trunc(sys date,'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
AS
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