首页 > 解决方案 > 使用 SYS.ANYDATA.CONVERTDATE 获取上个月的第一天和最后一天

问题描述

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

ARGUMENT_NAMEforIN_DATE_FROM_DTS 我想将上个月日期的第一天放入DEFAULT_VALUE参数中。在ARGUMENT_NAMEforIN_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 => ''
        );

标签: sqloracledate

解决方案


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

推荐阅读