如何选择年份列表x今年的年份

时间:2019-04-13 06:41:19

标签: sql postgresql

试图在psql中构造一个select语句,其中包含的年份列表是“今年”之前的(x)年。

SQL to return list of years since a specific year中提供的答案的修改适用于sql,但不适用于postgres。

尝试过修改generate_series,但未成功。

3 个答案:

答案 0 :(得分:0)

使用-1步骤。示例x = 15

select * 
from 
    generate_series(
        extract(year from current_date)::int, 
        extract(year from current_date)::int - 15, 
        -1
    )

另一种方法:

select 
    extract(year from x.y)
from 
    generate_series(
        current_timestamp, 
        current_timestamp - interval '1 year' * 15, 
        interval '-1 year'
    ) as x(y)

实时测试:https://www.db-fiddle.com/f/shVQnibndNh45uCZxt4jgs/3

https://www.db-fiddle.com/f/shVQnibndNh45uCZxt4jgs/0

答案 1 :(得分:0)

简短一点:您还可以使用generate_series函数的数字变量并直接转换EXTRACT函数的返回值,例如:

.limitToFirst(1)

答案 2 :(得分:0)

如果碰巧以“年”作为日期,则可以执行以下操作:

select *
from generate_series(date_trunc('year', now()) - interval '15 year',
                     date_trunc('year', now()),
                     interval '1 year'
                    )

(这是我通常想要的年份列表。)

更重要的是,您可以轻松地使SQL Server代码适应Postgres:

with recursive yearlist as  (
      select extract(year from now()) as year, 1 as lev
      union all
      select yl.year - 1 as year, lev + 1
      from yearlist yl
      where lev < 15
  )
select year
from yearlist
order by year desc;

我建议改用generate_series(),但我想证明Postgres也支持递归CTE。