【发布时间】:2018-01-02 07:53:14
【问题描述】:
以下查询返回
select to_char( trunc(sysdate) - numtoyminterval(level - 1, 'month'), 'mon-yy') as month from dual connect by level <= 12
根据今天的日期(即 18 年 1 月 2 日)过去 12 个月。
如果今天的日期是 29-DEC-17,它会给出 oracle sql 错误: ORA-01839:指定月份的日期无效 (因为在减去结果中会有一个日期为 '29-FEB-17' 这是不可能的)。因此,在特定日期会弹出此错误。你建议如何克服这个问题?
【问题讨论】:
-
你在这里真正想要什么输出?例如。 31号会出问题半年。应该显示哪一天?
-
除了最简单的日期算术之外,最好使用预先设计的日期表。即使你有了这个,其中所讨论的日期周期是“参差不齐的”(有不同的天数),你必须包含逻辑来确定如何处理不包含特定日期的月份。例如,对于非闰年的 2 月 29 日,您是选择 2 月 28 日、3 月 1 日,还是完全忽略它?
-
@TimBiegeleisen 道歉蒂姆,我已经编辑了这个问题,以使要求更清楚,因为日期不需要显示在输出中,它可以采用“mon-yy”格式跨度>
-
这是 ANSI 标准:oracle-wtf.blogspot.co.uk/2006/02/…