发布日期并提取周数 - 结果不一致



我一直在对按 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');

我最担心的是,我错过了这种差异有一些很好的理由......

如手册中所述'WW'返回

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

(强调我的)

extract(week ...)始终返回 ISO 周。如果您希望to_char()也返回 ISO 周,则需要改用'IW'。如果您还想显示带有to_char()的年份,则应使用'IYYY'而不是等效于'YYYY'extract(isoyear ...)

最新更新