2017-08-31 46 views
0

我是新来甲骨文,我想打印什么是Oracle本年度最后一个月的记录。我想打印本年度最后一个月日期甲骨文

预期输出:201707

在SQL Server中的以下作品,我需要得到同样的甲骨文

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

上面的查询工作在SQL,我想在Oracle –

+0

相同的输出我明白你的意思。我很抱歉!!!。上面的查询我在MS SQL写2012 –

+0

显然,“本年度最后一个月”无厘头1月20日,因为“最后蛾”,那么是不是在“当前”的一年。请澄清。 – mathguy

回答

2

您的代码似乎是SQL服务器(而不是甲骨文)。

除此之外,越来越年份和月份组成部分,并从本月减去一个不会在当前的月份是一月,你会得到月产量为00工作。

这应该工作:

SELECT TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1), 'YYYYMM') 
FROM DUAL 
-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; 
+0

'TO_CHAR(SYSDATE-31 'YYYYMM')'失败了本月的最第一天。 'TO_CHAR(SYSDATE,'YYYYMM') - 1'在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回去1个月)那么首先不需要截断sysdate;它可以按原样使用。或者,如果你去截断sysdate第一的麻烦,那么你可以只减去有一天,没有必要整整一个月减去。无论哪种方式,一个函数调用就足够了,不需要两个函数调用(应用to_char()到结果之前)。