我想在Oracle上打印上个月的当前日期

时间:2017-08-31 10:03:22

标签: sql oracle oracle11g

我是Oracle的新手,我想要打印的是上个月当前在甲骨文的记录。

预期输出:201707

以下在SQL Server中工作,我需要在Oracle中使用相同的

select convert(varchar(10),year(GETDATE())) + '0' + convert(varchar(10), MONTH(getdate())-1)

3 个答案:

答案 0 :(得分:2)

您的代码似乎适用于SQL Server(而不是Oracle)。

除此之外,当月份为1月份时,获取年份和月份组件并从月份中减去一个组件将不起作用,因为您将月份输出量设为00

这应该有效:

SELECT TO_CHAR( ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), -1 ), 'YYYYMM' )
FROM   DUAL

答案 1 :(得分:0)

@ MT0已经提供了正确答案。

可以通过以下两种方式之一进行简化:

select to_char(add_months(sysdate, -1), 'yyyymm') from dual;

select to_char(trunc(sysdate, 'mm') - 1, 'yyyymm') from dual;

重点是:如果你使用add_months(参数-1返回一个月),那么就不需要先截断sysdate;它可以按原样使用。或者,如果你先解决sysdate的问题,那么你可以减去一天,不需要减去整整一个月。无论哪种方式,一个函数调用就足够了,不需要两个函数调用(在将to_char()应用于结果之前)。

答案 2 :(得分:-2)

实现这一目标的不同方法。

SELECT TO_CHAR(SYSDATE-31,'YYYYMM') FROM   DUAL;
SELECT TO_CHAR(SYSDATE,'YYYYMM')-1 FROM DUAL;
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYYMM') FROM DUAL;