如何根据当前日期返回包含过去四年的行集?
如果此查询在2010年12月31日运行,则应返回:
2007 2008 2009 2010
但是,如果它在2011年1月1日运行,则应返回:
2008 2009 2010 2011
这是我开始的工作,有两个查询返回了起始年份。我更喜欢第二种,因为转换为字符串对我来说有点脏。
SELECT TO_CHAR(TRUNC(sysdate, 'YY') - INTERVAL '3' YEAR, 'YYYY') FROM DUAL; SELECT EXTRACT (YEAR FROM sysdate) - 3 FROM DUAL;
但是我不知道如何生成行来充实它。在SQL Server中,我将像此页上的fn_nums函数一样使用CTE 。
这是一种方法:
SELECT yr FROM ( SELECT EXTRACT (YEAR FROM (ADD_MONTHS ( SYSDATE, - ( (LEVEL - 1) * 12)))) yr FROM DUAL CONNECT BY LEVEL <= 4) ORDER BY yr;
或者:
SELECT yr FROM ( SELECT EXTRACT (YEAR FROM sysdate) - (level -1 ) yr FROM DUAL CONNECT BY LEVEL <= 4) ORDER BY yr;
SELECT yr FROM (SELECT EXTRACT (YEAR FROM SYSDATE) - (x - 1) yr FROM DUAL MODEL DIMENSION BY (1 AS z) MEASURES (1 x) RULES ITERATE (4) (x [ITERATION_NUMBER] = ITERATION_NUMBER + 1)) ORDER BY yr;