簡體   English   中英

如何選擇年份x年份列表

[英]How to select a list of years x number of years from this year

嘗試在psql中構造一個select語句,其中包含的年份列表是(x)“今年”之前的年數。

修改SQL中提供的答案, 以返回自特定年份以來 sql的年份列表 ,但不是postgres。

嘗試過修改generate_series,但沒有成功。

使用-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

稍微更短一些:您還可以使用generate_series函數的數字變量並直接轉換EXTRACT函數的返回值,例如:

SELECT
    EXTRACT(YEAR FROM CURRENT_DATE + ('1y'::interval * x))::text AS year
FROM
    generate_series(-7, -1) AS x
;

如果您碰巧將“年”作為日期,您可以:

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM