创建一个从 Sysdate 到 2012 的 SQL Select

Create an SQL Select which counts from Sysdate to 2012

我目前正在尝试创建一个我想在 Apex select 列表中使用的 SQL 查询。

我只需要从今年(Sysdate,以这种格式 --> YYYY)计算到 2012 年。

结果应该是这样的:

A1
-----
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012

我的尝试:

select a1 from
(
SELECT to_char(SYSDATE,'YYYY') a1 FROM dual
UNION ALL
SELECT to_char(add_months(SYSDATE,-12),'YYYY') FROM dual
UNION ALL
SELECT to_char(add_months(SYSDATE,-24),'YYYY') FROM dual
UNION ALL
SELECT to_char(add_months(SYSDATE,-36),'YYYY') FROM dual
UNION ALL
SELECT to_char(add_months(SYSDATE,-48),'YYYY') FROM dual
UNION ALL
SELECT to_char(add_months(SYSDATE,-60),'YYYY') FROM dual
UNION ALL
SELECT to_char(add_months(SYSDATE,-72),'YYYY') FROM dual
UNION ALL
SELECT to_char(add_months(SYSDATE,-84),'YYYY') FROM dual
UNION ALL
SELECT to_char(add_months(SYSDATE,-96),'YYYY') FROM dual
UNION ALL
SELECT to_char(add_months(SYSDATE,-108),'YYYY') FROM dual
) a

但这是硬编码的,我需要逐年更改它。

或这个例子,但这是 PLSQL,我需要它 SQL

Declare v_counter Number;
begin    
    a1:= to_char(Sysdate, 'YYYY');
    dbms_output.put_line(a1);
    While a1 > 2014 loop
    a1 := a1-1;
    dbms_output.put_line(a1);
    end loop;
end;

您首先可以通过以下查询 select 从对偶中连续 10 个数字:

select level from dual connect by level<=10;

然后我刚刚从当前日期的年份中减去数字以获得所有连续的年份。在 where 子句中,我从 sysddate 中提取了年份并从中减去 2012 以获得要发布的年份数。使用以下查询来实现您正在寻找的内容。

SELECT TO_CHAR(SYSDATE,'YYYY')-LEVEL+1 as A1 FROM
DUAL
CONNECT BY LEVEL <= (select extract(year from sysdate)-2012 from dual)+1
order by A1