Postgres日期和提取周数-结果不一致

时间:2019-02-21 15:18:58

标签: sql postgresql date week-number

我一直在对按ISO周分组的Postgres(v10.6)数据库中的数据进行一些统计分析,并且偶然发现周数的返回方式明显不一致,例如:

SELECT TO_CHAR(DATE_TRUNC('week',TIMESTAMP '2019-02-14'),'WW');

返回 06

而:

SELECT EXTRACT(WEEK FROM TIMESTAMP '2019-02-14');

返回 7

为什么存在差异/其中哪一项是正确的?我怀疑是后者,因为PHP中的等效操作也会返回 07

$dte = new DateTime('2019-02-14');
echo $dte->format('W');

我主要担心的是,我缺少这种差异的某些充分原因...

1 个答案:

答案 0 :(得分:3)

As documented in the manual 'WW'返回

  

年份的周数(1-53)(第一周从一年的第一天开始

(重点是我的)

extract(week ...) always returns the ISO week。如果希望to_char()也返回ISO周,则需要改用'IW'。如果您还想用to_char()显示年份,则应使用'IYYY'代替'YYYY',它等效于extract(isoyear ...)