创建一个从 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
我目前正在尝试创建一个我想在 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