我是Oracle的新手,我想要打印的是上个月当前在甲骨文的记录。
预期输出:201707
以下在SQL Server中工作,我需要在Oracle中使用相同的
select convert(varchar(10),year(GETDATE())) + '0' + convert(varchar(10), MONTH(getdate())-1)
答案 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;