sql - 使用 SYS.ANYDATA.CONVERTDATE 获取上个月的第一天和最后一天
问题描述
我想使用上个月的第一天和最后一天,SYS.ANYDATA.CONVERTDATE(TRUNC(SYSDATE,'MM'))
因为它允许我仅通过使用转换日期来在我的工作链脚本中使用日期SYS.ANYDATA.CONVERTDATE
。
在ARGUMENT_NAME
forIN_DATE_FROM_DTS
我想将上个月日期的第一天放入DEFAULT_VALUE
参数中。在ARGUMENT_NAME
forIN_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 => ''
);
解决方案
我只需要修改条件 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
推荐阅读
- c - 多线程 -> 调度。核心转储
- java - 当我将扫描仪对象分配给变量时程序崩溃
- python - 即使数组长度相同,matplotlib 中的 ValueError
- django - 尝试在 Heroku 上收集静态文件时没有这样的文件或目录
- node.js - Node.js 的 GoogleAPIs,如何在没有浏览器和人工交互的情况下在服务器上对用户进行 oauth2
- sql - 根据其他日期字段的间隔更新日期字段
- swift - 委托方法:AVSpeechSynthesizerDelegate 的“willSpeakRangeOfSpeechString”未被调用
- git - Docker 上的 Jenkins 无法从 GitLab 克隆存储库,返回状态码 128
- material-ui - Material-ui 主题不会自动应用在 AppBar 上?
- eclipse - Maven Java Jersey Rest:未找到提供程序类。(访问 URL 时出现 404 错误)