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