使用SYS.ANYDATA.CONVERTDATE获取上个月的第一天和最后一天

时间:2018-09-18 08:58:56

标签: sql oracle date

我想使用SYS.ANYDATA.CONVERTDATE(TRUNC(SYSDATE,'MM'))获取上个月的第一天和最后一天,因为它允许我仅通过使用SYS.ANYDATA.CONVERTDATE转换日期来使用工作链脚本中的日期。

ARGUMENT_NAME的{​​{1}}中,我想将上个月日期的第一天放在IN_DATE_FROM_DTS参数中。在DEFAULT_VALUE的{​​{1}}中,我想在ARGUMENT_NAME参数中输入上个月日期的最后一天。

IN_DATE_TO_DTS

2 个答案:

答案 0 :(得分:1)

这将在之前的几个月中起作用:

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   

答案 1 :(得分:1)

  

我只需要修改条件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