在postgresql中提取匹配年份的周数

时间:2015-07-06 15:14:25

标签: postgresql

在postgresql中extract(week from '2014-12-30'::timestamp)给出了2015年的第1周。如何提取与周数相对应的关联年份?使用extract(year ...提供了2014

2 个答案:

答案 0 :(得分:3)

由于week是ISO定义的周,您需要isoyear

#= select extract(isoyear from '2014-12-30'::timestamp);
 date_part
-----------
      2015
(1 row)

来自docs

  

根据定义,ISO周从星期一和一年的第一周开始   包含那一年的1月4日。换句话说,第一个星期四   一年是在那一年的第1周。

     

在ISO周编号系统中,可能在1月初   日期是上一年的第52周或第53周的一部分,并且   12月下旬的日期将成为明年第一周的一部分。   例如,2005-01-01是2004年第53周的一部分,并且   2006-01-01是2005年第52周的一部分,而2012-12-31是   2013年第一周的一部分。建议使用isoyear   与周一起获得一致的结果。

答案 1 :(得分:0)

根据postgresql documentation for extract week

  

当天的一周中的星期数。根据定义   (ISO 8601),一年的第一周包含当年的1月4日。   (ISO-8601周从星期一开始。)换句话说,第一个   一年的星期四是在那一年的第1周。 (用于时间戳值   只)

基于此,你可能需要做一点逻辑:

case when extract(week from '2014-12-30'::timestamp) = 1 
     and extract(month from '2014-12-30'::timestamp) = 12
  then extract(year from '2014-12-30'::timestamp)+1
  else extract(year from '2014-12-30'::timestamp)
end