PostgreSQL 从日期变量中提取年份

PostgreSQL extract Year fromDate variable

我想从我的日期类型列中提取年份, 我使用了提取功能。但它不能接受我的专栏作为来源, 在我的查询下面找到

SELECT NO_PTF, (select extract(year from timestamp C.DT_CRS)::int) as NO_AEE, MT_PRF
  FROM public.perfcumultb C
       INNER JOIN
      (SELECT DT_CRS -- Date maxi pour chaque année
          FROM ( SELECT (select extract(year from timestamp DT_CRS)::int) as ANNEE, MAX(DT_CRS) AS DT_CRS
                  FROM public.perfcumultb 
                  GROUP BY (select extract(year from timestamp DT_CRS)::int)) C
              )        Q ON C.DT_CRS = Q.DT_CRS;

我知道当我将 DT_CRS 替换为“2006-01-05”时,它是 运行 而没有错误。但在这里我需要保留专栏 有人有想法吗?

这个:

(select extract(year from timestamp c.dt_crs)::int) as no_aee

最有可能简化为:

extract(year from c.dt_crs) as no_aee

即:

  • 不需要分select

  • timestamp关键字用于声明文字时间戳;如果 dt_crs 不是时间戳数据类型,你可以用 dt_crs::timestamp 转换它,但我假设它已经是正确的数据类型

  • extract() returns 整数值,不用强制转换

我也强烈怀疑您的查询可以简化。它看起来 就像您想要包含每年最新日期的行一样。如果是这样,请使用 distinct on:

select distinct on (extract(year from dt_crs)) c.*
from public.perfcumultb c
order by extract(year from dt_crs), dt_crs desc